public static MethodReference GetMethodReference(this MethodDefinition methodDefinition, Stack<TypeDefinition> typeDefinitions)
{
var methodReference = FodyEnvironment.ModuleDefinition.Import(methodDefinition).GetGeneric();
if (methodDefinition.IsStatic)
{
return methodReference;
}
typeDefinitions.Pop();
while (typeDefinitions.Count > 0)
{
var definition = typeDefinitions.Pop();
// Only call lower class if possible
var containsMethod = (from method in definition.Methods
where method.Name == methodDefinition.Name
select method).Any();
if (containsMethod)
{
methodReference = methodReference.MakeGeneric(definition.BaseType);
}
}
return methodReference;
}
}