static bool MethodMatch(MethodReference candidate, MethodReference method)
{
var candidateResolved = candidate.Resolve();
// Check overrides
if (candidateResolved.HasOverrides)
{
foreach (var @override in candidateResolved.Overrides)
{
var resolvedOverride = ResolveGenericsVisitor.Process(candidate, @override);
return MemberEqualityComparer.Default.Equals(resolvedOverride, method);
}
}
if (!candidateResolved.IsVirtual)
return false;
if (candidate.Name != method.Name)
return false;
if (!TypeMatch(ResolveGenericsVisitor.Process(candidate, candidate.ReturnType), ResolveGenericsVisitor.Process(method, method.ReturnType)))
return false;
if (candidate.Parameters.Count != method.Parameters.Count)
return false;
for (int i = 0; i < candidate.Parameters.Count; i++)
if (!TypeMatch(ResolveGenericsVisitor.Process(candidate, candidate.Parameters[i].ParameterType), ResolveGenericsVisitor.Process(method, method.Parameters[i].ParameterType)))
return false;
return true;
}