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>2010-05-25 18:20:44 +0400
committerLluis Sanchez <lluis@novell.com>2010-05-25 18:20:44 +0400
commite888cb2d660bba9d05774fba2f0f54de6df1d5cf (patch)
tree06fd8c1a4ed422e3f2b0a98035922bcdfe6b6d07 /Mono.Addins.CecilReflector
parentcd1df7b2a4cb170c95f2ea5b1e9cd0f7d89ba14f (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/ChangeLog5
-rw-r--r--Mono.Addins.CecilReflector/Mono.Addins.CecilReflector/Reflector.cs41
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)
{