private MethodRef MakeMethodRef(Cci.IMethodReference methodRef, Cci.ISpecializedMethodReference specializedRef, bool isConstructor) { Type declaringType = ResolveType(methodRef.GetContainingType(_context)); MethodBase unspecializedDefinition = null; if (specializedRef != null) { // resolvemethod unspecializedDefinition = isConstructor ? ResolveConstructor(specializedRef.UnspecializedVersion) : ResolveMethod(specializedRef.UnspecializedVersion); } var m = new MethodRef(declaringType, methodRef.Name, GetManagedCallingConvention(methodRef.CallingConvention), unspecializedDefinition, GetExtraParameterTypes(methodRef)); Type[] genericParameters; ParameterInfo[] parameters; ParameterInfo returnParameter; if (unspecializedDefinition != null) { if (isConstructor) { returnParameter = new SimpleParameterInfo(unspecializedDefinition, 0, typeof(void)); } else { returnParameter = ((MethodInfo)unspecializedDefinition).ReturnParameter; } // TODO(tomat): change containing method? genericParameters = unspecializedDefinition.GetGenericArguments(); parameters = unspecializedDefinition.GetParameters(); } else { MakeMethodParameters(m, methodRef, out genericParameters, out parameters, out returnParameter); } m.InitializeParameters(genericParameters, parameters, returnParameter); return m; }