* CustomAttributeBuilder.cs: Add some argument checking. Handle
authorJackson Harper <jackson@novell.com>
Tue, 9 Mar 2004 23:53:27 +0000 (23:53 -0000)
committerJackson Harper <jackson@novell.com>
Tue, 9 Mar 2004 23:53:27 +0000 (23:53 -0000)
default arguments properly.

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

mcs/class/corlib/System.Reflection.Emit/ChangeLog
mcs/class/corlib/System.Reflection.Emit/CustomAttributeBuilder.cs

index 2affcdd6189d778be92365670824972bcaedc15f..d18177ecb4be2f58c1ea69476f48f8ab709a5123 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-09  Jackson Harper  <jackson@ximian.com>
+
+       * CustomAttributeBuilder.cs: Add some argument checking. Handle
+       default arguments properly.
+
 2004-03-09  Sebastien Pouliot  <spouliot@videotron.ca>
 
        * AssemblyBuilder.cs: The strong name key file existance will now be
index 498b7b515ddf0d7e6db50636c511764f55e165b5..b5d3903ff4c30d511dc61f2d64d643cc0b9d3cd3 100755 (executable)
@@ -37,18 +37,59 @@ namespace System.Reflection.Emit {
                }
                
                public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs)
-                       : this (con, constructorArgs, null, null, null, null) {
+               {
+                       Initialize (con, constructorArgs, new PropertyInfo [0], new object [0],
+                                       new FieldInfo [0], new object [0]);
                }
-               public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs, FieldInfo[] namedFields, object[] fieldValues)
-                       : this (con, constructorArgs, null, null, namedFields, fieldValues) {
+               public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs,
+                               FieldInfo[] namedFields, object[] fieldValues) 
+               {
+                       Initialize (con, constructorArgs, new PropertyInfo [0], new object [0],
+                                       namedFields, fieldValues);
                }
-               public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs, PropertyInfo[] namedProperties, object[] propertyValues)
-                       : this (con, constructorArgs, namedProperties, propertyValues, null, null) {
+               public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs,
+                               PropertyInfo[] namedProperties, object[] propertyValues)
+               {
+                       Initialize (con, constructorArgs, namedProperties, propertyValues, new FieldInfo [0],
+                                       new object [0]);
                }
-               public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs, PropertyInfo[] namedProperties, object[] propertyValues, FieldInfo[] namedFields, object[] fieldValues) {
+               public CustomAttributeBuilder( ConstructorInfo con, object[] constructorArgs,
+                               PropertyInfo[] namedProperties, object[] propertyValues,
+                               FieldInfo[] namedFields, object[] fieldValues)
+               {
+                       Initialize (con, constructorArgs, namedProperties, propertyValues, namedFields, fieldValues);
+               }
+
+               private void Initialize (ConstructorInfo con, object [] constructorArgs,
+                               PropertyInfo [] namedProperties, object [] propertyValues,
+                               FieldInfo [] namedFields, object [] fieldValues)
+               {
                        ctor = con;
+                       if (con == null)
+                               throw new ArgumentNullException ("con");
                        if (constructorArgs == null)
                                throw new ArgumentNullException ("constructorArgs");
+                       if (namedProperties == null)
+                               throw new ArgumentNullException ("namedProperties");
+                       if (propertyValues == null)
+                               throw new ArgumentNullException ("propertyValues");
+                       if (namedFields == null)
+                               throw new ArgumentNullException ("namedFields");
+                       if (fieldValues == null)
+                               throw new ArgumentNullException ("fieldValues");
+                       if (con.GetParameterCount () != constructorArgs.Length)
+                               throw new ArgumentException ("Parameter count does not match " +
+                                               "passed in argument value count.");
+                       if (namedProperties.Length != propertyValues.Length)
+                               throw new ArgumentException ("Array lengths must be the same.",
+                                               "namedProperties, propertyValues");
+                       if (namedFields.Length != fieldValues.Length)
+                               throw new ArgumentException ("Array lengths must be the same.",
+                                               "namedFields, fieldValues");
+                       if ((con.Attributes & MethodAttributes.Static) == MethodAttributes.Static ||
+                                       (con.Attributes & MethodAttributes.Private) == MethodAttributes.Private)
+                               throw new ArgumentException ("Cannot have private or static constructor.");
+                               
                        data = GetBlob (con, constructorArgs, namedProperties, propertyValues, namedFields, fieldValues);
                }