2 using System.Collections.Generic;
10 static class TypeHelper {
12 public static AssemblyResolver Resolver = new AssemblyResolver ();
14 internal static bool IsPublic (TypeReference typeref)
17 throw new ArgumentNullException ("typeref");
19 TypeDefinition td = typeref.Resolve ();
26 internal static bool IsDelegate (TypeReference typeref)
28 return IsDerivedFrom (typeref, "System.MulticastDelegate");
31 internal static bool IsDerivedFrom (TypeReference type, string derivedFrom)
33 foreach (var def in WalkHierarchy (type))
34 if (def.FullName == derivedFrom)
40 internal static IEnumerable<TypeDefinition> WalkHierarchy (TypeReference type)
42 for (var def = type.Resolve (); def != null; def = GetBaseType (def))
46 internal static IEnumerable<TypeReference> GetInterfaces (TypeReference type)
48 var ifaces = new Dictionary<string, TypeReference> ();
50 foreach (var def in WalkHierarchy (type))
51 foreach (TypeReference iface in def.Interfaces)
52 ifaces [iface.FullName] = iface;
57 internal static TypeDefinition GetBaseType (TypeDefinition child)
59 if (child.BaseType == null)
62 return child.BaseType.Resolve ();
65 internal static bool IsPublic (CustomAttribute att)
67 return IsPublic (att.AttributeType);
70 internal static string GetFullName (CustomAttribute att)
72 return att.AttributeType.FullName;
75 internal static TypeDefinition GetTypeDefinition (CustomAttribute att)
77 return att.AttributeType.Resolve ();