public GetMethodReference ( Stack |
||
typeDefinitions | Stack |
|
methodDefinition | MethodDefinition | |
return |
public MethodReference GetMethodReference(Stack<TypeDefinition> typeDefinitions, MethodDefinition methodDefinition)
{
try
{
var methodReference = moduleReader.Module.Import(methodDefinition).GetGeneric();
typeDefinitions.Pop();
while (typeDefinitions.Count > 0)
{
var definition = typeDefinitions.Pop();
methodReference = MakeGeneric(definition.BaseType, methodReference);
}
return methodReference;
}
catch (Exception exception)
{
throw new Exception(string.Format("Could not make method generic '{0}'.", methodDefinition.GetName()), exception);
}
}
public EventInvokerMethod RecursiveFindMethod(TypeDefinition typeDefinition) { var typeDefinitions = new Stack <TypeDefinition>(); MethodDefinition methodDefinition; var currentTypeDefinition = typeDefinition; do { typeDefinitions.Push(currentTypeDefinition); if (FindEventInvokerMethodDefinition(currentTypeDefinition, out methodDefinition)) { break; } var baseType = currentTypeDefinition.BaseType; if (baseType == null || baseType.FullName == "System.Object") { return(null); } currentTypeDefinition = typeResolver.Resolve(baseType); } while (true); return(new EventInvokerMethod { MethodReference = methodGenerifier.GetMethodReference(typeDefinitions, methodDefinition), IsBeforeAfter = IsBeforeAfterMethod(methodDefinition), }); }