2009-02-15 Jonathan Chambers <joncham@gmail.com>
[mcs.git] / tools / corcompare / Util.cs
blob70b64c3233ab0464b5581c86b97a675d622de80d
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using Mono.Cecil;
6 using GuiCompare;
8 namespace CorCompare {
10 static class TypeHelper {
12 public static AssemblyResolver Resolver = new AssemblyResolver ();
14 internal static bool IsPublic (TypeReference typeref)
16 if (typeref == null)
17 throw new ArgumentNullException ("typeref");
19 TypeDefinition td = typeref.Resolve ();
20 return td.IsPublic;
23 internal static bool IsDelegate (TypeReference typeref)
25 return IsDerivedFrom (typeref, "System.MulticastDelegate");
28 internal static bool IsDerivedFrom (TypeReference type, string derivedFrom)
30 foreach (var def in WalkHierarchy (type))
31 if (def.FullName == derivedFrom)
32 return true;
34 return false;
37 internal static IEnumerable<TypeDefinition> WalkHierarchy (TypeReference type)
39 for (var def = type.Resolve (); def != null; def = GetBaseType (def))
40 yield return def;
43 internal static IEnumerable<TypeReference> GetInterfaces (TypeReference type)
45 var ifaces = new Dictionary<string, TypeReference> ();
47 foreach (var def in WalkHierarchy (type))
48 foreach (TypeReference iface in def.Interfaces)
49 ifaces [iface.FullName] = iface;
51 return ifaces.Values;
54 internal static TypeDefinition GetBaseType (TypeDefinition child)
56 if (child.BaseType == null)
57 return null;
59 return child.BaseType.Resolve ();
62 internal static bool IsPublic (CustomAttribute att)
64 return IsPublic (att.Constructor.DeclaringType);
67 internal static string GetFullName (CustomAttribute att)
69 return att.Constructor.DeclaringType.FullName;
72 internal static TypeDefinition GetTypeDefinition (CustomAttribute att)
74 return att.Constructor.DeclaringType.Resolve ();