public string Gather()
        {
            int remainingCount = MAX_COUNT;

            var resultStore = new SignatureStore();

            foreach (string filePath in new SampleProvider())
            {
                if (0 == remainingCount--)
                {
                    break;
                }
                string sig = SignatureExtractor.Extract(filePath);
                resultStore.RecordSignature(sig);
            }

            return(resultStore.GenerateReport());
        }
Ejemplo n.º 2
0
    uint GetMethodReferenceInternedId(IMethodReference methodReference) {
      Contract.Requires(methodReference != null);

      var genInstanceRef = methodReference as IGenericMethodInstanceReference;
      if (genInstanceRef != null) return this.GetGenericMethodInstanceReferenceInternedKey(genInstanceRef);
      uint containingTypeReferenceInternedId = this.GetTypeReferenceInternId(methodReference.ContainingType);
      uint requiredParameterTypesInternedId = this.GetParameterTypeListInternId(methodReference.Parameters.GetEnumerator());
      uint returnValueCustomModifiersInternedId = 0;
      uint genericParameterCount = methodReference.GenericParameterCount;
      if (methodReference.ReturnValueIsModified)
        returnValueCustomModifiersInternedId = this.GetCustomModifierListInternId(methodReference.ReturnValueCustomModifiers.GetEnumerator());
      uint returnTypeReferenceInternedId = this.GetTypeReferenceInternId(methodReference.Type);
      MultiHashtable<SignatureStore>/*?*/ methods = this.MethodReferenceHashtable.Find(containingTypeReferenceInternedId);
      if (methods == null) {
        methods = new MultiHashtable<SignatureStore>();
        this.MethodReferenceHashtable.Add(containingTypeReferenceInternedId, methods);
      }
      foreach (SignatureStore signatureStore in methods.GetValuesFor((uint)methodReference.Name.UniqueKey)) {
        if (
          signatureStore.CallingConvention == methodReference.CallingConvention
          && signatureStore.RequiredParameterListInternedId == requiredParameterTypesInternedId
          && signatureStore.ReturnValueCustomModifiersListInteredId == returnValueCustomModifiersInternedId
          && signatureStore.ReturnValueIsByRef == methodReference.ReturnValueIsByRef
          && signatureStore.ReturnTypeReferenceInternedId == returnTypeReferenceInternedId
          && signatureStore.GenericParameterCount == genericParameterCount
        ) {
          return signatureStore.InternedId;
        }
      }
      SignatureStore signatureStore1 = new SignatureStore(methodReference.CallingConvention, requiredParameterTypesInternedId,
        0, methodReference.ReturnValueIsByRef, returnValueCustomModifiersInternedId, returnTypeReferenceInternedId, genericParameterCount,
        this.CurrentMethodReferenceInternValue++);
      methods.Add((uint)methodReference.Name.UniqueKey, signatureStore1);
      return signatureStore1.InternedId;
    }
Ejemplo n.º 3
0
    uint GetSignatureInternId(CallingConvention callingConvention, IEnumerable<IParameterTypeInformation> parameters, IEnumerable<IParameterTypeInformation> extraArgumentTypes,
      IEnumerable<ICustomModifier> returnValueCustomModifiers, bool returnValueIsByRef, ITypeReference returnType) {
      Contract.Requires(parameters != null);
      Contract.Requires(extraArgumentTypes != null);
      Contract.Requires(returnValueCustomModifiers != null);
      Contract.Requires(returnType != null);

      uint requiredParameterTypesInternedId = this.GetParameterTypeListInternId(parameters.GetEnumerator());
      uint extraArgumentTypesInteredId = this.GetParameterTypeListInternId(extraArgumentTypes.GetEnumerator());
      uint returnValueCustomModifiersInternedId = this.GetCustomModifierListInternId(returnValueCustomModifiers.GetEnumerator());
      uint returnTypeReferenceInternedId = this.GetTypeReferenceInternId(returnType);
      foreach (SignatureStore signatureStore in this.SignatureHashtable.GetValuesFor(requiredParameterTypesInternedId)) {
        if (
          signatureStore.CallingConvention == callingConvention
          && signatureStore.RequiredParameterListInternedId == requiredParameterTypesInternedId
          && signatureStore.ExtraParameterListInternedId == extraArgumentTypesInteredId
          && signatureStore.ReturnValueCustomModifiersListInteredId == returnValueCustomModifiersInternedId
          && signatureStore.ReturnValueIsByRef == returnValueIsByRef
          && signatureStore.ReturnTypeReferenceInternedId == returnTypeReferenceInternedId
        ) {
          return signatureStore.InternedId;
        }
      }
      SignatureStore signatureStore1 = new SignatureStore(callingConvention, requiredParameterTypesInternedId, extraArgumentTypesInteredId, returnValueIsByRef, returnValueCustomModifiersInternedId, returnTypeReferenceInternedId, 0, this.CurrentSignatureInternValue++);
      this.SignatureHashtable.Add(requiredParameterTypesInternedId, signatureStore1);
      return signatureStore1.InternedId;
    }
Ejemplo n.º 4
0
Archivo: Core.cs Proyecto: xornand/cci
    uint GetMethodReferenceInternedId(IMethodReference potentiallySpecializedMethodReference) {
      Contract.Requires(potentiallySpecializedMethodReference != null);

      var genInstanceRef = potentiallySpecializedMethodReference as IGenericMethodInstanceReference;
      if (genInstanceRef != null) return this.GetGenericMethodInstanceReferenceInternedKey(genInstanceRef);
      uint containingTypeReferenceInternedId = this.GetTypeReferenceInternId(potentiallySpecializedMethodReference.ContainingType);

      // After constructing the containingTypeReferenceInternedId, perform the rest of the InternId
      // calculation using the unspecialized version of the method reference. This allows
      // the intern keys for methods which have overlapping type parameters to be distinguished
      // if the method parameters are different on the open type. 
      // For instance 
      // interface I<T> {
      //    void Print(T t)
      //    void Print(int t)
      // }
      //
      // We do not want the intern key for I<int>.Print(T) to match that of I<int>.Print(int)
      //  (This is hard to see with ToString, as Cci reports both of these methods to be "I<int>.Print(int)")
      IMethodReference methodReference;
      if (potentiallySpecializedMethodReference is ISpecializedMethodReference)
      {
          methodReference = ((ISpecializedMethodReference)potentiallySpecializedMethodReference).UnspecializedVersion;
      }
      else
      {
          methodReference = potentiallySpecializedMethodReference;
      }
      uint requiredParameterTypesInternedId = this.GetParameterTypeListInternId(methodReference.Parameters.GetEnumerator(), methodReference.ParameterCount);
      uint returnValueCustomModifiersInternedId = 0;
      uint genericParameterCount = methodReference.GenericParameterCount;
      if (methodReference.ReturnValueIsModified)
        returnValueCustomModifiersInternedId = this.GetCustomModifierListInternId(methodReference.ReturnValueCustomModifiers.GetEnumerator());
      uint returnTypeReferenceInternedId = this.GetTypeReferenceInternId(methodReference.Type);
      MultiHashtable<SignatureStore>/*?*/ methods = this.MethodReferenceHashtable.Find(containingTypeReferenceInternedId);
      if (methods == null) {
        methods = new MultiHashtable<SignatureStore>();
        this.MethodReferenceHashtable.Add(containingTypeReferenceInternedId, methods);
      }
      foreach (SignatureStore signatureStore in methods.GetValuesFor((uint)methodReference.Name.UniqueKey)) {
        if (
          signatureStore.CallingConvention == methodReference.CallingConvention
          && signatureStore.RequiredParameterListInternedId == requiredParameterTypesInternedId
          && signatureStore.ReturnValueCustomModifiersListInteredId == returnValueCustomModifiersInternedId
          && signatureStore.ReturnValueIsByRef == methodReference.ReturnValueIsByRef
          && signatureStore.ReturnTypeReferenceInternedId == returnTypeReferenceInternedId
          && signatureStore.GenericParameterCount == genericParameterCount
        ) {
          return signatureStore.InternedId;
        }
      }
      SignatureStore signatureStore1 = new SignatureStore(methodReference.CallingConvention, requiredParameterTypesInternedId,
        0, methodReference.ReturnValueIsByRef, returnValueCustomModifiersInternedId, returnTypeReferenceInternedId, genericParameterCount,
        this.CurrentMethodReferenceInternValue++);
      methods.Add((uint)methodReference.Name.UniqueKey, signatureStore1);
      return signatureStore1.InternedId;
    }