diff options
author | Lluis Sanchez <lluis@novell.com> | 2008-06-11 15:42:43 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@novell.com> | 2008-06-11 15:42:43 +0400 |
commit | f59c8cd39fb177f44e138dfc56f8b80e2df33a71 (patch) | |
tree | c7255c2d30a96e3624c0d6a47fd781a94afc60ea /Mono.Addins.CecilReflector | |
parent | 1728fe51bd31374cfc60667b8a31749c2f7cc29e (diff) |
* Mono.Addins.CecilReflector/Reflector.cs: Fix retrieval of inherited
attributes. Fix code that get the list of base interfaces.
svn path=/trunk/mono-addins/; revision=105565
Diffstat (limited to 'Mono.Addins.CecilReflector')
-rw-r--r-- | Mono.Addins.CecilReflector/ChangeLog | 5 | ||||
-rw-r--r-- | Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs | 29 |
2 files changed, 25 insertions, 9 deletions
diff --git a/Mono.Addins.CecilReflector/ChangeLog b/Mono.Addins.CecilReflector/ChangeLog index 94b66c4..41fb5b8 100644 --- a/Mono.Addins.CecilReflector/ChangeLog +++ b/Mono.Addins.CecilReflector/ChangeLog @@ -1,3 +1,8 @@ +2008-06-11 Lluis Sanchez Gual <lluis@novell.com> + + * Mono.Addins.CecilReflector/Reflector.cs: Fix retrieval of inherited + attributes. Fix code that get the list of base interfaces. + 2008-02-15 Lluis Sanchez Gual <lluis@novell.com> * Mono.Addins.CecilReflector/Reflector.cs: Fix bug in GetCustomAttribute. diff --git a/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs b/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs index e5ad2d2..e3dceb0 100644 --- a/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs +++ b/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs @@ -56,6 +56,14 @@ namespace Mono.Addins.CecilReflector if (catt != null) atts.Add (catt); } + if (inherit && (obj is TypeDefinition)) { + TypeDefinition td = (TypeDefinition) obj; + if (td.BaseType != null && td.BaseType.FullName != "System.Object") { + TypeDefinition bt = FindTypeDefinition (td.Module.Assembly, td.BaseType); + if (bt != null) + atts.AddRange (GetCustomAttributes (bt, type, true)); + } + } return atts.ToArray (); } @@ -213,26 +221,29 @@ namespace Mono.Addins.CecilReflector ArrayList list = new ArrayList (); Hashtable visited = new Hashtable (); GetBaseTypeFullNameList (visited, list, asm, t); + list.Remove (t.FullName); return list; } void GetBaseTypeFullNameList (Hashtable visited, ArrayList list, AssemblyDefinition asm, TypeReference tr) { + if (tr.FullName == "System.Object" || visited.Contains (tr.FullName)) + return; + + visited [tr.FullName] = tr; + list.Add (tr.FullName); + TypeDefinition type = FindTypeDefinition (asm, tr); if (type == null) return; - + asm = GetAssemblyDefinition (type); - TypeReference btype = type.BaseType; - if (btype != null && btype.FullName != "System.Object" && !visited.Contains (btype.FullName)) { - list.Add (btype.FullName); - visited [btype.FullName] = btype; - GetBaseTypeFullNameList (visited, list, asm, btype); - } - foreach (TypeReference interf in type.Interfaces) { + if (type.BaseType != null) + GetBaseTypeFullNameList (visited, list, asm, type.BaseType); + + foreach (TypeReference interf in type.Interfaces) GetBaseTypeFullNameList (visited, list, asm, interf); - } } TypeDefinition FindTypeDefinition (AssemblyDefinition referencer, TypeReference rt) |