2010-05-11 Marek Safar <marek.safar@gmail.com>
authorMarek Safar <marek.safar@gmail.com>
Tue, 11 May 2010 21:00:06 +0000 (21:00 -0000)
committerMarek Safar <marek.safar@gmail.com>
Tue, 11 May 2010 21:00:06 +0000 (21:00 -0000)
A fix for bug #604748
* class.cs, typespec.cs: Search full imported attribute hierarchy
for AttributeUsage.

svn path=/trunk/mcs/; revision=157168

mcs/mcs/ChangeLog
mcs/mcs/class.cs
mcs/mcs/typespec.cs

index 3cab048d42b778d4495339fe30295af324a0fe5c..2a8fe3bfec5fc187da21bd71e6bf4a766ec63c6a 100644 (file)
@@ -1,3 +1,9 @@
+2010-05-11  Marek Safar  <marek.safar@gmail.com>
+
+       A fix for bug #604748
+       * class.cs, typespec.cs: Search full imported attribute hierarchy
+       for AttributeUsage.
+
 2010-05-11  Marek Safar  <marek.safar@gmail.com>
 
        * namespace.cs: Ignore missing dependencies failure at
index 581c3e766c09ba340369808a48eacaea82f8a817..a950801e5da0a3ea3492a169f33e905c8d58bd16 100644 (file)
@@ -796,12 +796,8 @@ namespace Mono.CSharp {
                                a = OptAttributes.Search (pa);
                        }
 
-                       if (a == null) {
-                               if (BaseType != TypeManager.attribute_type)
-                                       return BaseType.GetAttributeUsage (pa);
-
+                       if (a == null)
                                return null;
-                       }
 
                        return a.GetAttributeUsageAttribute ();
                }
index c6eaeac7b9590d96671ded434d06d9294f69bc30..6440ba44ead89c31537c45fe5429dec02b767cca 100644 (file)
@@ -238,8 +238,17 @@ namespace Mono.CSharp
                        if (!pa.IsDefined)
                                return Attribute.DefaultUsageAttribute;
 
-                       var aua = MemberDefinition.GetAttributeUsage (pa);
-                       return aua ?? Attribute.DefaultUsageAttribute;
+                       AttributeUsageAttribute aua = null;
+                       var type = this;
+                       while (type != null) {
+                               aua = type.MemberDefinition.GetAttributeUsage (pa);
+                               if (aua != null)
+                                       break;
+
+                               type = type.BaseType;
+                       }
+
+                       return aua;
                }
 
                public virtual Type GetMetaInfo ()