public static ProductException CreateError (int code, Exception innerException, Mono.Cecil.TypeReference location, string message, params object[] args) { var e = new ProductException (code, true, innerException, message, args); if (location != null) { var td = location.Resolve (); if (td.HasMethods) { foreach (var method in td.Methods) { if (!method.IsConstructor) continue; SetLocation (e, method); if (e.FileName != null) break; } } } return e; }
protected static bool IsEqualOrSubclass (Mono.Linker.AssemblyResolver resolver, MC.TypeReference inspect, MC.TypeReference baseClass) { MC.TypeDefinition currentType = resolver.Resolve (inspect); while (true) { if (baseClass.FullName == currentType.FullName) return true; if (currentType.BaseType.FullName == "System.Object") return false; currentType = resolver.Resolve (currentType.BaseType); } }
protected static bool ImplementsInterface (Mono.Linker.AssemblyResolver resolver, MC.TypeReference inspect, MC.TypeReference interf) { MC.TypeDefinition currentType = resolver.Resolve (inspect); foreach (MC.TypeReference child in currentType.Interfaces) { if (child.FullName == interf.FullName) return true; if (ImplementsInterface (resolver, child, interf)) return true; } if (ImplementsInterface (resolver, currentType.BaseType, interf)) return true; return false; }
protected static IEnumerable<MC.CustomAttribute> AllCustomAttributes (Mono.Linker.AssemblyResolver resolver, MC.TypeDefinition typedef) { MC.TypeDefinition currentType = typedef; while (true) { foreach (MC.CustomAttribute attr in currentType.CustomAttributes) yield return attr; if (currentType.BaseType.FullName == "System.Object") yield break; currentType = resolver.Resolve (currentType.BaseType); } }