public MethodReference Resolve(MethodReference method)
{
var methodReference = method;
if (IsDummy ())
return methodReference;
var declaringType = Resolve (method.DeclaringType);
var genericInstanceMethod = method as GenericInstanceMethod;
if (genericInstanceMethod != null) {
methodReference = new MethodReference (method.Name, method.ReturnType, declaringType);
foreach (var p in method.Parameters)
methodReference.Parameters.Add (new ParameterDefinition (p.Name, p.Attributes, p.ParameterType));
foreach (var gp in genericInstanceMethod.ElementMethod.GenericParameters)
methodReference.GenericParameters.Add (new GenericParameter (gp.Name, methodReference));
methodReference.HasThis = method.HasThis;
var m = new GenericInstanceMethod (methodReference);
foreach (var ga in genericInstanceMethod.GenericArguments) {
m.GenericArguments.Add (Resolve (ga));
}
methodReference = m;
} else {
methodReference = new MethodReference (method.Name, method.ReturnType, declaringType);
foreach (var gp in method.GenericParameters)
methodReference.GenericParameters.Add (new GenericParameter (gp.Name, methodReference));
foreach (var p in method.Parameters)
methodReference.Parameters.Add (new ParameterDefinition (p.Name, p.Attributes, p.ParameterType));
methodReference.HasThis = method.HasThis;
}
return methodReference;
}