private MethodReference RecursiveFindMethod(TypeDefinition typeDefinition, string methodName, string[] parameterNames = null, bool findGenericDefinition = false)
{
var typeDefinitions = new Stack<TypeDefinition>();
MethodDefinition methodDefinition;
var currentTypeDefinition = typeDefinition;
do
{
typeDefinitions.Push(currentTypeDefinition);
if (FindMethodDefinition(currentTypeDefinition, methodName, parameterNames, findGenericDefinition, out methodDefinition))
{
break;
}
var baseType = currentTypeDefinition.BaseType;
if (baseType == null || baseType.FullName == "System.Object")
{
return null;
}
currentTypeDefinition = baseType.ResolveType();
}
while (true);
return methodDefinition.GetMethodReference(typeDefinitions);
}