2007-11-14 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / corlib / System.Reflection.Emit / GenericTypeParameterBuilder.cs
index 76dd120bfa8c55472c6656da5f39004c473c68b8..5483f01560f4ab253835eff732bb57aa8d588576 100644 (file)
@@ -50,6 +50,7 @@ namespace System.Reflection.Emit
                private int index;
                private Type base_type;
                private Type[] iface_constraints;
+               private CustomAttributeBuilder[] cattrs;
                private GenericParameterAttributes attrs;
        #endregion
 
@@ -59,7 +60,7 @@ namespace System.Reflection.Emit
                }
 
                [ComVisible (true)]
-               public void SetInterfaceConstraints (Type[] iface_constraints)
+               public void SetInterfaceConstraints (params Type[] iface_constraints)
                {
                        this.iface_constraints = iface_constraints;
                }
@@ -288,13 +289,11 @@ namespace System.Reflection.Emit
                }
 
                public override Type DeclaringType {
-                       get { return mbuilder != null ? null : tbuilder; }
+                       get { return mbuilder != null ? mbuilder.DeclaringType : tbuilder; }
                }
 
                public override Type ReflectedType {
-                       get {
-                               return DeclaringType;
-                       }
+                       get { return DeclaringType; }
                }
 
                public override RuntimeTypeHandle TypeHandle {
@@ -352,9 +351,23 @@ namespace System.Reflection.Emit
                        return ret;
                }
 
-               public override MethodInfo DeclaringMethod {
-                       get { 
-                               return mbuilder;
+               public override MethodBase DeclaringMethod {
+                       get { return mbuilder; }
+               }
+
+               public void SetCustomAttribute (CustomAttributeBuilder customBuilder)
+               {
+                       if (customBuilder == null)
+                               throw new ArgumentNullException ("customBuilder");
+
+                       if (cattrs != null) {
+                               CustomAttributeBuilder[] new_array = new CustomAttributeBuilder [cattrs.Length + 1];
+                               cattrs.CopyTo (new_array, 0);
+                               new_array [cattrs.Length] = customBuilder;
+                               cattrs = new_array;
+                       } else {
+                               cattrs = new CustomAttributeBuilder [1];
+                               cattrs [0] = customBuilder;
                        }
                }