[Mono-bugs] [Bug 377596] New: Cannot retrieve Generic Type Parameter Custom Attributes via Reflection
bugzilla_noreply at novell.com
bugzilla_noreply at novell.com
Mon Apr 7 08:51:40 EDT 2008
https://bugzilla.novell.com/show_bug.cgi?id=377596
Summary: Cannot retrieve Generic Type Parameter Custom Attributes
via Reflection
Product: Mono: Runtime
Version: SVN
Platform: x86-64
OS/Version: openSUSE 10.3
Status: NEW
Severity: Normal
Priority: P5 - None
Component: generics
AssignedTo: mono-bugs at lists.ximian.com
ReportedBy: jonpryor at vt.edu
QAContact: mono-bugs at lists.ximian.com
Found By: ---
System.Type.GetCustomAttributes() should return custom attributes on generic
type parameters.
Sample program:
// generic argument attributes?
using System;
using System.Reflection;
[AttributeUsage (AttributeTargets.All)]
public class DocAttribute : Attribute {
public DocAttribute (string docs) {}
}
class Foo<[Doc ("T")] T, [Doc ("B")] B>
where T : class, new ()
where B : Attribute
{
public T Bar { get{return null;}}
public void M<[Doc ("X")] X> (X x)
{
}
}
class Test {
public static void Main ()
{
Type t = typeof(Foo<,>);
Type[] tArgs = t.GetGenericArguments ();
PrintGenericAttributes (tArgs);
MethodInfo m = t.GetMethod ("M");
PrintGenericAttributes (m.GetGenericArguments ());
}
static void PrintGenericAttributes (Type[] tArgs)
{
foreach (Type ta in tArgs) {
Console.WriteLine ("Generic Parameter: {0}",
ta.Name);
Console.WriteLine ("\tGeneric Paramter
Attributes: {0}",
ta.GenericParameterAttributes);
object[] ca = ta.GetCustomAttributes (true);
Console.WriteLine ("\tGetCustomAttributes={0};
count={1}", ca, ca.Length);
foreach (object o in ca)
Console.WriteLine ("\tCustom Attribute:
{0}", o.GetType().FullName);
Type[] constraints =
ta.GetGenericParameterConstraints ();
foreach (Type tc in constraints)
Console.WriteLine ("\tconstraint: {0}",
tc);
}
}
}
Expected output:
Generic Parameter: T
Generic Paramter Attributes: ReferenceTypeConstraint,
DefaultConstructorConstraint
GetCustomAttributes=System.Object[]; count=1
Custom Attribute: DocAttribute
Generic Parameter: B
Generic Paramter Attributes: None
GetCustomAttributes=System.Object[]; count=2
Custom Attribute: DocAttribute
Custom Attribute: System.AttributeUsageAttribute
constraint: System.Attribute
Generic Parameter: X
Generic Paramter Attributes: None
GetCustomAttributes=System.Object[]; count=1
Custom Attribute: DocAttribute
Notice in the output that GetCustomAttributes() returns a count >= 1 in all
cases.
Actual output under mono r98602:
Generic Parameter: T
Generic Paramter Attributes: ReferenceTypeConstraint,
DefaultConstructorConstraint
GetCustomAttributes=System.Attribute[]; count=0
Generic Parameter: B
Generic Paramter Attributes: None
GetCustomAttributes=System.Attribute[]; count=1
Custom Attribute: System.AttributeUsageAttribute
constraint: System.Attribute
Generic Parameter: X
Generic Paramter Attributes: None
GetCustomAttributes=System.Attribute[]; count=0
Notice that the only parameter with count >= 1 is B, and that's for an
AttributeUsageAttribute.
--
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
More information about the mono-bugs
mailing list