Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono-addins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@novell.com>2008-06-11 15:42:43 +0400
committerLluis Sanchez <lluis@novell.com>2008-06-11 15:42:43 +0400
commitf59c8cd39fb177f44e138dfc56f8b80e2df33a71 (patch)
treec7255c2d30a96e3624c0d6a47fd781a94afc60ea /Mono.Addins.CecilReflector
parent1728fe51bd31374cfc60667b8a31749c2f7cc29e (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/ChangeLog5
-rw-r--r--Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs29
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)