diff options
author | Lluis Sanchez <lluis@novell.com> | 2010-05-25 18:20:44 +0400 |
---|---|---|
committer | Lluis Sanchez <lluis@novell.com> | 2010-05-25 18:20:44 +0400 |
commit | e888cb2d660bba9d05774fba2f0f54de6df1d5cf (patch) | |
tree | 06fd8c1a4ed422e3f2b0a98035922bcdfe6b6d07 /Mono.Addins.CecilReflector | |
parent | cd1df7b2a4cb170c95f2ea5b1e9cd0f7d89ba14f (diff) |
* Mono.Addins.sln:
* mautil/mautil.csproj:
* Mono.Addins/Mono.Addins.csproj:
* Mono.Addins.Gui/Mono.Addins.Gui.csproj: Add Debug and Release
configurations.
* Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs:
When resolving custom attribute properties and fields look it base
classes.
* Mono.Addins/Mono.Addins.Database/AddinScanner.cs: Fixed node type
parsing issue with TypeExtensionPointAttribute.
svn path=/trunk/mono-addins/; revision=157853
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 | 41 |
2 files changed, 35 insertions, 11 deletions
diff --git a/Mono.Addins.CecilReflector/ChangeLog b/Mono.Addins.CecilReflector/ChangeLog index 8b40f71..d19e7fd 100644 --- a/Mono.Addins.CecilReflector/ChangeLog +++ b/Mono.Addins.CecilReflector/ChangeLog @@ -1,3 +1,8 @@ +2010-05-25 Lluis Sanchez Gual <lluis@novell.com> + + * Mono.Addins.CecilReflector/Reflector.cs: When resolving + custom attribute properties and fields look it base classes. + 2010-05-20 Lluis Sanchez Gual <lluis@novell.com> * Mono.Addins.CecilReflector/Reflector.cs: Added methods for diff --git a/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs b/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs index a569eb4..b86a0c7 100644 --- a/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs +++ b/Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs @@ -196,12 +196,19 @@ namespace Mono.Addins.CecilReflector if (val == null) continue; - foreach (PropertyDefinition prop in attType.Properties.GetProperties (pname)) { - NodeAttributeAttribute bat = (NodeAttributeAttribute) GetCustomAttribute (prop, typeof(NodeAttributeAttribute), false); - if (bat != null) { - string name = string.IsNullOrEmpty (bat.Name) ? prop.Name : bat.Name; - mat.Add (name, Convert.ToString (val, System.Globalization.CultureInfo.InvariantCulture)); + foreach (TypeDefinition td in GetInheritanceChain (attType)) { + bool propFound = false; + foreach (PropertyDefinition prop in td.Properties.GetProperties (pname)) { + NodeAttributeAttribute bat = (NodeAttributeAttribute) GetCustomAttribute (prop, typeof(NodeAttributeAttribute), false); + if (bat != null) { + string name = string.IsNullOrEmpty (bat.Name) ? prop.Name : bat.Name; + mat.Add (name, Convert.ToString (val, System.Globalization.CultureInfo.InvariantCulture)); + propFound = true; + break; + } } + if (propFound) + break; } } @@ -211,17 +218,29 @@ namespace Mono.Addins.CecilReflector if (val == null) continue; - FieldDefinition field = attType.Fields.GetField (pname); - if (field != null) { - NodeAttributeAttribute bat = (NodeAttributeAttribute) GetCustomAttribute (field, typeof(NodeAttributeAttribute), false); - if (bat != null) { - string name = string.IsNullOrEmpty (bat.Name) ? field.Name : bat.Name; - mat.Add (name, Convert.ToString (val, System.Globalization.CultureInfo.InvariantCulture)); + foreach (TypeDefinition td in GetInheritanceChain (attType)) { + FieldDefinition field = td.Fields.GetField (pname); + if (field != null) { + NodeAttributeAttribute bat = (NodeAttributeAttribute) GetCustomAttribute (field, typeof(NodeAttributeAttribute), false); + if (bat != null) { + string name = string.IsNullOrEmpty (bat.Name) ? field.Name : bat.Name; + mat.Add (name, Convert.ToString (val, System.Globalization.CultureInfo.InvariantCulture)); + } } } } return mat; } + + IEnumerable<TypeDefinition> GetInheritanceChain (TypeDefinition td) + { + yield return td; + while (td != null && td.BaseType != null && td.BaseType.FullName != "System.Object") { + td = FindTypeDefinition (td.Module.Assembly, td.BaseType); + if (td != null) + yield return td; + } + } MethodReference FindConstructor (CustomAttribute att) { |