IMethodReference GetMethodReference(IteratorClosureInformation iteratorClosure, IMethodDefinition methodDefinition) {
ITypeReference typeReference = GetClosureTypeReferenceFromIterator(iteratorClosure);
IMethodReference methodReference = methodDefinition;
ISpecializedNestedTypeReference specializedNestedTypeRef = typeReference as ISpecializedNestedTypeReference;
IGenericTypeInstanceReference genericInstanceRef = typeReference as IGenericTypeInstanceReference;
if (specializedNestedTypeRef != null || genericInstanceRef != null) {
methodReference = new SpecializedMethodReference() {
ContainingType = typeReference,
GenericParameterCount = methodDefinition.GenericParameterCount,
InternFactory = this.host.InternFactory,
UnspecializedVersion = methodDefinition,
Type = methodDefinition.Type,
Name = methodDefinition.Name,
CallingConvention = methodDefinition.CallingConvention,
Parameters = methodDefinition.ParameterCount == 0 ? null : new List<IParameterTypeInformation>(((IMethodReference)methodDefinition).Parameters),
ExtraParameters = null,
ReturnValueIsByRef = methodDefinition.ReturnValueIsByRef,
ReturnValueIsModified = methodDefinition.ReturnValueIsModified,
Attributes = null,
};
}
return methodReference;
}