static MethodReference CreateGenericInstanceCandidate(Inflater.GenericContext context, TypeDefinition candidateType, MethodDefinition interfaceMethod) { var methodReference = new MethodReference(interfaceMethod.Name, interfaceMethod.ReturnType, candidateType) { HasThis = interfaceMethod.HasThis }; foreach (var genericMethodParameter in interfaceMethod.GenericParameters) { methodReference.GenericParameters.Add(new GenericParameter(genericMethodParameter.Name, methodReference)); } if (interfaceMethod.ReturnType.IsGenericParameter || interfaceMethod.ReturnType.IsGenericInstance) { methodReference.ReturnType = Inflater.InflateType(context, interfaceMethod.ReturnType); } foreach (var p in interfaceMethod.Parameters) { var parameterType = p.ParameterType; if (parameterType.IsGenericParameter || parameterType.IsGenericInstance) { parameterType = Inflater.InflateType(context, parameterType); } methodReference.Parameters.Add(new ParameterDefinition(p.Name, p.Attributes, parameterType)); } return(methodReference); }