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()); }
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; }
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; }
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; }