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)
34 foreach (var def in WalkHierarchy (type)) {
40 if (def.FullName == derivedFrom)
47 internal static IEnumerable<TypeDefinition> WalkHierarchy (TypeReference type)
49 for (var def = type.Resolve (); def != null; def = GetBaseType (def))
53 internal static IEnumerable<TypeReference> GetInterfaces (TypeReference type)
55 var ifaces = new Dictionary<string, TypeReference> ();
57 foreach (var def in WalkHierarchy (type))
58 foreach (TypeReference iface in def.Interfaces)
59 ifaces [iface.FullName] = iface;
64 internal static TypeDefinition GetBaseType (TypeDefinition child)
66 if (child.BaseType == null)
69 return child.BaseType.Resolve ();
72 internal static bool IsPublic (CustomAttribute att)
74 return IsPublic (att.AttributeType);
77 internal static string GetFullName (CustomAttribute att)
79 return att.AttributeType.FullName;
82 internal static TypeDefinition GetTypeDefinition (CustomAttribute att)
84 return att.AttributeType.Resolve ();