private bool MethodNeedsOverride(TrustedMethodBase method, TrustedType type) { // Property code generator will sometimes pass in null if (method == null) { return(false); } return(method.IsAbstract && (method.IsPublic || method.IsFamily) && !IsOverridden(method, type)); }
private bool MethodSignaturesMatch(TrustedMethodBase method1, TrustedMethodBase method2) { if (method1.Name == method2.Name) { TrustedParameterInfo[] params1 = method1.GetParameters(); TrustedParameterInfo[] params2 = method2.GetParameters(); if (params1.Length == params2.Length) { bool paramsMatch = true; for (int n = 0; n < params1.Length; n++) { if (params1[n].ParameterType != params2[n].ParameterType) { paramsMatch = false; } } return(paramsMatch); } } return(false); }
/// <summary> /// Walk up the inheritance tree until we find an override /// or the class where the abstract method was defined /// </summary> private bool IsOverridden(TrustedMethodBase method, TrustedType type) { if (method.DeclaringType == type) { return(false); } TrustedMethodInfo[] methods = type.GetMethods(flags); if (methods != null) { foreach (TrustedMethodInfo info in methods) { if (MethodSignaturesMatch(info, method)) { MethodBody body = info.GetMethodBody(); if (body != null) { return(true); } } } } return(IsOverridden(method, type.BaseType)); }
protected MethodGeneratorBase(TrustedMethodBase method) { this.methodBase = method; }