2005-02-05 Gonzalo Paniagua Javier <gonzalo@ximian.com>
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Sat, 5 Feb 2005 18:06:52 +0000 (18:06 -0000)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Sat, 5 Feb 2005 18:06:52 +0000 (18:06 -0000)
* Test/System.ComponentModel/TypeDescriptorTests.cs: new test for
TypeConverter ctor that takes a Type argument.

* System.ComponentModel/TypeDescriptor.cs: fixed bug #71601.
GetConverter should handle TypeConverter derived classes that
take a Type argument.

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

mcs/class/System/System.ComponentModel/ChangeLog
mcs/class/System/System.ComponentModel/TypeDescriptor.cs
mcs/class/System/Test/System.ComponentModel/ChangeLog
mcs/class/System/Test/System.ComponentModel/TypeDescriptorTests.cs

index fce68030cba1c1e7e1f41f027896df57bc9bfc53..5bfc9a50b1fe74a1dd69a653d15070be1c2cfac8 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-05 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * TypeDescriptor.cs: fixed bug #71601.  GetConverter should handle
+       TypeConverter derived classes that take a Type argument.
+
 2005-01-27  LLuis Sanchez Gual  <lluis@novell.com>
 
        * DateTimeConverter.cs, CultureInfoConverter.cs, DecimalConverter.cs,
index 6548c6ba0b198b40470292e3f197f5a8ae816a4e..b8c10a03097f45748e3d81916839754047a99abc 100644 (file)
@@ -259,10 +259,22 @@ public sealed class TypeDescriptor
                if (t == null)\r
                        t = FindConverterType (type);\r
 \r
-               if (t != null)
-                       return (TypeConverter) Activator.CreateInstance (t);
-               else
-                       return new ReferenceConverter (type);    // Default?
+               if (t != null) {
+                       Exception exc = null;
+                       try {
+                               return (TypeConverter) Activator.CreateInstance (t);
+                       } catch (MissingMethodException e) {
+                               exc = e;
+                       }
+
+                       try {
+                               return (TypeConverter) Activator.CreateInstance (t, new object [] {type});
+                       } catch (MissingMethodException e) {
+                               throw exc;
+                       }
+               }
+
+               return new ReferenceConverter (type);    // Default?
        }\r
 \r
        private static Type FindConverterType (Type type)\r
index e1fb5e82de248208f3029b11bcc39d09ff0f457d..992a46fd74e1716024181cf722bfbd3a6ec4ac52 100644 (file)
@@ -1,3 +1,8 @@
+2005-02-05 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * TypeDescriptorTests.cs: new test for TypeConverter ctor that takes
+       a Type argument.
+
 2005-01-24  Joerg Rosenkranz (joergr@voelcker.com)
 
        * TypeDescriptorTests.cs: Added tests for bug #71444
index 2e166de30324fba21a9958f4afbe9a9e6733cc66..464888b4648cc27584d51cd1f0fdb0074a0b09a5 100644 (file)
@@ -341,6 +341,28 @@ namespace MonoTests.System.ComponentModel
                        Assert ("t6.2", col.Find ("AnotherProperty", true) == null);
                }
 
+               [TypeConverter (typeof (TestConverter))]
+               class TestConverterClass {
+               }
+
+               class TestConverter : TypeConverter {
+                       public Type Type;
+
+                       public TestConverter (Type type)
+                       {
+                               this.Type = type;
+                       }
+               }
+
+               [Test]
+               public void TestConverterCtorWithArgument ()
+               {
+                       TypeConverter t = TypeDescriptor.GetConverter (typeof (TestConverterClass));
+                       Assert ("#01", null != t.GetType ());
+                       AssertEquals ("#02", typeof (TestConverter), t.GetType ());
+                       TestConverter converter = (TestConverter) t;
+                       AssertEquals ("#03", typeof (TestConverterClass), converter.Type);
+               }
        }
 }