2002-07-09 Gonzalo Paniagua Javier <gonzalo@ximian.com>
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Wed, 10 Jul 2002 01:37:47 +0000 (01:37 -0000)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Wed, 10 Jul 2002 01:37:47 +0000 (01:37 -0000)
* Activator.cs: reformatted. Implemented CreateInstance* methods
that return ObjectHandle.

* AppDomain.cs: implemented CreateInstance*AndUnwrap methods.

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

mcs/class/corlib/System/Activator.cs
mcs/class/corlib/System/AppDomain.cs
mcs/class/corlib/System/ChangeLog

index 6cd2808026821dac006d48c0cd7fc15ff410a87c..68f7ef69b2d0e20291b37000791a656a985286da 100644 (file)
-//\r
-// System.Activator.cs\r
-//\r
-// Author:\r
-//   Nick Drochak II (ndrochak@gol.com)\r
-//\r
-// (C) 2001 Nick Drochak II\r
-//\r
-\r
-using System.Runtime.Remoting;\r
-using System.Reflection;\r
-using System.Globalization;\r
-using System.Security.Policy;\r
-\r
-namespace System \r
-{\r
-       // FIXME: This class is just stubs to get System.dll to compile\r
-       public sealed class Activator\r
-       {\r
-               private Activator () {}\r
-\r
-               [MonoTODO]\r
-               public static ObjectHandle CreateComInstanceFrom(string assemblyName, \r
-                       string typeName) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-\r
-               [MonoTODO]\r
-               public static ObjectHandle CreateInstanceFrom(string assemblyFile, \r
-                       string typeName) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-\r
-               [MonoTODO]\r
-               public static ObjectHandle CreateInstanceFrom(string assemblyFile, \r
-                       string typeName, object[] activationAttributes) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static ObjectHandle CreateInstanceFrom(string assemblyFile, \r
-                       string typeName, bool ignoreCase, BindingFlags bindingAttr, \r
-                       Binder binder, object[] args, CultureInfo culture, object[] activationAttributes, \r
-                       Evidence securityInfo) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static ObjectHandle CreateInstance(string assemblyName, \r
-                       string typeName) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static ObjectHandle CreateInstance(string assemblyName, \r
-                       string typeName, object[] activationAttributes) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static ObjectHandle CreateInstance(string assemblyName, \r
-                       string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, \r
-                       object[] args, CultureInfo culture, object[] activationAttributes, \r
-                       Evidence securityInfo) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-               \r
-               public static object CreateInstance(Type type) {\r
-                       return CreateInstance (type, false);\r
-               }\r
-               \r
-               public static object CreateInstance(Type type, object[] args) {\r
-                       return CreateInstance (type, args, new object [0]);\r
-               }\r
-\r
-               [MonoTODO]\r
-               public static object CreateInstance(Type type, object[] args, object[] activationAttributes) {\r
-                       Type[] atypes = new Type [args.Length];\r
-                       for (int i = 0; i < args.Length; ++i) {\r
-                               atypes [i] = args [i].GetType ();\r
-                       }\r
-                       ConstructorInfo ctor = type.GetConstructor (atypes);\r
-                       return ctor.Invoke (args);\r
-\r
-               }\r
-\r
-               [MonoTODO]\r
-               public static object CreateInstance(Type type, \r
-                       BindingFlags bindingAttr, Binder binder, object[] args, \r
-                       CultureInfo culture) { \r
-                       return CreateInstance (type, bindingAttr, binder, args, culture, new object [0]);\r
-               }\r
-\r
-               [MonoTODO]\r
-               public static object CreateInstance(Type type, \r
-                               BindingFlags bindingAttr, Binder binder, object[] args, \r
-                               CultureInfo culture, object[] activationAttributes) { \r
-                       Type[] atypes = new Type [args.Length];\r
-                       for (int i = 0; i < args.Length; ++i) {\r
-                               atypes [i] = args [i].GetType ();\r
-                       }\r
-                       ConstructorInfo ctor = type.GetConstructor (bindingAttr, binder, atypes, null);\r
-                       return ctor.Invoke (args, bindingAttr, binder, args, culture);\r
-               }\r
-\r
-               [MonoTODO]\r
-               public static object CreateInstance(Type type, bool nonPublic) { \r
-                       ConstructorInfo ctor = type.GetConstructor (Type.EmptyTypes);\r
-                       return ctor.Invoke (null);\r
-               }\r
-\r
-               [MonoTODO]\r
-               public static object GetObject(Type type, \r
-                       string url) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-\r
-               [MonoTODO]\r
-               public static object GetObject(Type type, \r
-                       string url, object state) { \r
-                       throw new NotImplementedException(); \r
-               }\r
-       }\r
-}\r
+//
+// System.Activator.cs
+//
+// Authors:
+//   Nick Drochak II (ndrochak@gol.com)
+//   Gonzalo Paniagua (gonzalo@ximian.com)
+//
+// (C) 2001 Nick Drochak II
+// (c) 2002 Ximian, Inc. (http://www.ximian.com)
+//
+
+using System.Runtime.Remoting;
+using System.Reflection;
+using System.Globalization;
+using System.Security.Policy;
+
+namespace System 
+{
+       public sealed class Activator
+       {
+               private static BindingFlags _flags = BindingFlags.CreateInstance |
+                                                    BindingFlags.Public |
+                                                    BindingFlags.Instance;
+
+               private Activator () {}
+
+               [MonoTODO]
+               public static ObjectHandle CreateComInstanceFrom (string assemblyName, string typeName)
+               {
+                       throw new NotImplementedException(); 
+               }
+
+               public static ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName)
+               {
+                       return CreateInstanceFrom (assemblyFile, typeName, null);
+               }
+
+               public static ObjectHandle CreateInstanceFrom (string assemblyFile,
+                                                              string typeName,
+                                                              object [] activationAttributes)
+               {
+                       return Activator.CreateInstanceFrom (assemblyFile,
+                                                            typeName,
+                                                            false,
+                                                            _flags,
+                                                            null,
+                                                            null,
+                                                            null,
+                                                            activationAttributes,
+                                                            null);
+               }
+               
+               [MonoTODO]
+               public static ObjectHandle CreateInstanceFrom (string assemblyFile,
+                                                              string typeName,
+                                                              bool ignoreCase,
+                                                              BindingFlags bindingAttr,
+                                                              Binder binder,
+                                                              object [] args,
+                                                              CultureInfo culture,
+                                                              object [] activationAttributes,
+                                                              Evidence securityInfo)
+               {
+                       //TODO: when Assembly implements security, use it.
+                       //Assembly assembly = Assembly.LoadFrom (assemblyFile, securityInfo);
+                       Assembly assembly = Assembly.LoadFrom (assemblyFile);
+                       Type type = assembly.GetType (typeName, true, ignoreCase);
+                       object obj = CreateInstance (type, bindingAttr, binder, args, culture, activationAttributes);
+                       return (obj != null) ? new ObjectHandle (obj) : null;
+               }
+               
+               public static ObjectHandle CreateInstance (string assemblyName, string typeName)
+               {
+                       return Activator.CreateInstance (assemblyName, typeName, null);
+               }
+               
+               public static ObjectHandle CreateInstance (string assemblyName,
+                                                          string typeName,
+                                                          object [] activationAttributes)
+               {
+                       return Activator.CreateInstance (assemblyName,
+                                                        typeName,
+                                                        false,
+                                                        _flags,
+                                                        null,
+                                                        null,
+                                                        null,
+                                                        activationAttributes,
+                                                        null);
+               }
+               
+               [MonoTODO]
+               public static ObjectHandle CreateInstance (string assemblyName,
+                                                          string typeName,
+                                                          bool ignoreCase,
+                                                          BindingFlags bindingAttr,
+                                                          Binder binder,
+                                                          object [] args,
+                                                          CultureInfo culture,
+                                                          object [] activationAttributes,
+                                                          Evidence securityInfo)
+               {
+                       //TODO: when Assembly implements security, use it.
+                       //Assembly assembly = Assembly.Load (assemblyFile, securityInfo);
+                       Assembly assembly = Assembly.Load (assemblyName);
+                       Type type = assembly.GetType (typeName, true, ignoreCase);
+                       object obj = CreateInstance (type, bindingAttr, binder, args, culture, activationAttributes);
+                       return (obj != null) ? new ObjectHandle (obj) : null;
+               }
+               
+               public static object CreateInstance (Type type)
+               {
+                       return CreateInstance (type, false);
+               }
+               
+               public static object CreateInstance (Type type, object [] args)
+               {
+                       return CreateInstance (type, args, new object [0]);
+               }
+
+               [MonoTODO]
+               public static object CreateInstance (Type type, object [] args, object [] activationAttributes)
+               {
+                       // activationAttributes?
+                       if (type == null)
+                               throw new ArgumentNullException ("type");
+
+                       if (args == null)
+                               throw new ArgumentNullException ("args");
+
+                       Type [] atypes = new Type [args.Length];
+                       for (int i = 0; i < args.Length; ++i) {
+                               atypes [i] = args [i].GetType ();
+                       }
+                       ConstructorInfo ctor = type.GetConstructor (atypes);
+                       if (ctor == null)
+                               return null;
+
+                       return ctor.Invoke (args);
+               }
+
+               public static object CreateInstance (Type type,
+                                                    BindingFlags bindingAttr,
+                                                    Binder binder,
+                                                    object [] args,
+                                                    CultureInfo culture)
+               {
+                       return CreateInstance (type, bindingAttr, binder, args, culture, new object [0]);
+               }
+
+               [MonoTODO]
+               public static object CreateInstance (Type type,
+                                                    BindingFlags bindingAttr,
+                                                    Binder binder,
+                                                    object [] args,
+                                                    CultureInfo culture,
+                                                    object [] activationAttributes)
+               {
+                       // activationAttributes?
+                       Type[] atypes = new Type [args.Length];
+                       for (int i = 0; i < args.Length; ++i) {
+                               atypes [i] = args [i].GetType ();
+                       }
+                       ConstructorInfo ctor = type.GetConstructor (bindingAttr, binder, atypes, null);
+                       if (ctor == null)
+                               return null;
+
+                       return ctor.Invoke (args, bindingAttr, binder, args, culture);
+               }
+
+               public static object CreateInstance (Type type, bool nonPublic)
+               { 
+                       if (type == null)
+                               throw new ArgumentNullException ("type");
+                               
+                       ConstructorInfo ctor = type.GetConstructor (Type.EmptyTypes);
+                       if (ctor.IsPublic && nonPublic == true)
+                               return null;
+
+                       if (ctor == null)
+                               return null;
+
+                       return ctor.Invoke (null);
+               }
+
+               [MonoTODO]
+               public static object GetObject (Type type, string url)
+               {
+                       throw new NotImplementedException(); 
+               }
+
+               [MonoTODO]
+               public static object GetObject (Type type, string url, object state)
+               { 
+                       throw new NotImplementedException(); 
+               }
+       }
+}
+
index 31cc6bcca042e9baabe23397d95f330bc62981a1..0b1837a90cd20471e76d64a6a463600e057237b6 100755 (executable)
@@ -5,6 +5,7 @@
 //   Paolo Molaro (lupus@ximian.com)
 //   Dietmar Maurer (dietmar@ximian.com)
 //   Miguel de Icaza (miguel@ximian.com)
+//   Gonzalo Paniagua (gonzalo@ximian.com)
 //
 // (C) 2001, 2002 Ximian, Inc.  http://www.ximian.com
 //
@@ -119,18 +120,21 @@ namespace System {
 
                public ObjectHandle CreateInstance (string assemblyName, string typeName)
                {
-                       return CreateInstance (assemblyName, typeName, false, 0,
-                                              null, null, null, null, null);
+                       if (assemblyName == null)
+                               throw new ArgumentNullException ("assemblyName");
+
+                       return Activator.CreateInstance (assemblyName, typeName);
                }
 
                public ObjectHandle CreateInstance (string assemblyName, string typeName,
                                                    object[] activationAttributes)
                {
-                       return CreateInstance (assemblyName, typeName, false, 0,
-                                              null, null, null, activationAttributes, null);
+                       if (assemblyName == null)
+                               throw new ArgumentNullException ("assemblyName");
+
+                       return Activator.CreateInstance (assemblyName, typeName, activationAttributes);
                }
                
-               [MonoTODO]
                public ObjectHandle CreateInstance (string assemblyName,
                                                    string typeName,
                                                    bool ignoreCase,
@@ -139,25 +143,75 @@ namespace System {
                                                    object[] args,
                                                    CultureInfo culture,
                                                    object[] activationAttributes,
-                                                   Evidence securityAttribtutes)
+                                                   Evidence securityAttributes)
                {
-                       throw new NotImplementedException ();
+                       if (assemblyName == null)
+                               throw new ArgumentNullException ("assemblyName");
+
+                       return Activator.CreateInstance (assemblyName,
+                                                        typeName,
+                                                        ignoreCase,
+                                                        bindingAttr,
+                                                        binder,
+                                                        args,
+                                                        culture,
+                                                        activationAttributes,
+                                                        securityAttributes);
+               }
+
+               public object CreateInstanceAndUnwrap (string assemblyName, string typeName)
+               {
+                       ObjectHandle oh = CreateInstance (assemblyName, typeName);
+                       return (oh != null) ? oh.Unwrap () : null;
+               }
+               
+               public object CreateInstanceAndUnwrap (string assemblyName,
+                                                      string typeName,
+                                                      object [] activationAttributes)
+               {
+                       ObjectHandle oh = CreateInstance (assemblyName, typeName, activationAttributes);
+                       return (oh != null) ? oh.Unwrap () : null;
+               }
+
+               public object CreateInstanceAndUnwrap (string assemblyName,
+                                                      string typeName,
+                                                      bool ignoreCase,
+                                                      BindingFlags bindingAttr,
+                                                      Binder binder,
+                                                      object[] args,
+                                                      CultureInfo culture,
+                                                      object[] activationAttributes,
+                                                      Evidence securityAttributes)
+               {
+                       ObjectHandle oh = CreateInstance (assemblyName,
+                                                         typeName,
+                                                         ignoreCase,
+                                                         bindingAttr,
+                                                         binder,
+                                                         args,
+                                                         culture,
+                                                         activationAttributes,
+                                                         securityAttributes);
+                       return (oh != null) ? oh.Unwrap () : null;
                }
 
                public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName)
                {
-                       return CreateInstanceFrom (assemblyName, typeName, false, 0,
-                                                  null, null, null, null, null);
+                       if (assemblyName == null)
+                               throw new ArgumentNullException ("assemblyName");
+
+                       return Activator.CreateInstanceFrom (assemblyName, typeName);
                }
                
                public ObjectHandle CreateInstanceFrom (string assemblyName, string typeName,
                                                        object[] activationAttributes)
                {
-                       return CreateInstanceFrom (assemblyName, typeName, false, 0,
-                                                  null, null, null, activationAttributes, null);
+                       if (assemblyName == null)
+                               throw new ArgumentNullException ("assemblyName");
+
+                       return Activator.CreateInstanceFrom (assemblyName, typeName, activationAttributes);
                }
                
-               [MonoTODO]
                public ObjectHandle CreateInstanceFrom (string assemblyName,
                                                        string typeName,
                                                        bool ignoreCase,
@@ -166,9 +220,56 @@ namespace System {
                                                        object[] args,
                                                        CultureInfo culture,
                                                        object[] activationAttributes,
-                                                       Evidence securityAttribtutes)
+                                                       Evidence securityAttributes)
                {
-                       throw new NotImplementedException ();                   
+                       if (assemblyName == null)
+                               throw new ArgumentNullException ("assemblyName");
+
+                       return Activator.CreateInstanceFrom (assemblyName,
+                                                            typeName,
+                                                            ignoreCase,
+                                                            bindingAttr,
+                                                            binder,
+                                                            args,
+                                                            culture,
+                                                            activationAttributes,
+                                                            securityAttributes);
+               }
+
+               public object CreateInstanceFromAndUnwrap (string assemblyName, string typeName)
+               {
+                       ObjectHandle oh = CreateInstanceFrom (assemblyName, typeName);
+                       return (oh != null) ? oh.Unwrap () : null;
+               }
+               
+               public object CreateInstanceFromAndUnwrap (string assemblyName,
+                                                          string typeName,
+                                                          object [] activationAttributes)
+               {
+                       ObjectHandle oh = CreateInstanceFrom (assemblyName, typeName, activationAttributes);
+                       return (oh != null) ? oh.Unwrap () : null;
+               }
+
+               public object CreateInstanceFromAndUnwrap (string assemblyName,
+                                                          string typeName,
+                                                          bool ignoreCase,
+                                                          BindingFlags bindingAttr,
+                                                          Binder binder,
+                                                          object[] args,
+                                                          CultureInfo culture,
+                                                          object[] activationAttributes,
+                                                          Evidence securityAttributes)
+               {
+                       ObjectHandle oh = CreateInstanceFrom (assemblyName,
+                                                             typeName,
+                                                             ignoreCase,
+                                                             bindingAttr,
+                                                             binder,
+                                                             args,
+                                                             culture,
+                                                             activationAttributes,
+                                                             securityAttributes);
+                       return (oh != null) ? oh.Unwrap () : null;
                }
 
                public AssemblyBuilder DefineDynamicAssembly (AssemblyName name,
index 25a57ea72b6a1b2a1a3146f9af8afc145138d31b..ff00aa3680e18e6e18b750d0e3f69c3a67ac6ee0 100644 (file)
@@ -1,3 +1,10 @@
+2002-07-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * Activator.cs: reformatted. Implemented CreateInstance* methods
+       that return ObjectHandle.
+
+       * AppDomain.cs: implemented CreateInstance*AndUnwrap methods.
+
 2002-07-03  Nick Drochak  <ndrochak@gol.com>
 
        * Decimal.cs (Divide): Short cut the case where the dividend is 0 (and