2002-08-21 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / class / corlib / System / AppDomain.cs
index a3aecdbec2fbcc2bbf1716c8f507fc48d0779037..1dc498e42b160c30cd820e1dac390edd77828549 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
 //
@@ -31,7 +32,7 @@ namespace System {
                private AppDomain () {}
                
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               public extern AppDomainSetup getSetup ();
+               private extern AppDomainSetup getSetup ();
 
                public AppDomainSetup SetupInformation {
 
@@ -72,7 +73,7 @@ namespace System {
                }
 
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               public extern string getFriendlyName ();
+               private extern string getFriendlyName ();
 
                public string FriendlyName {
 
@@ -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,
@@ -263,7 +364,7 @@ namespace System {
                {
                        // FIXME: examine all other parameters
                        
-                       AssemblyBuilder ab = new AssemblyBuilder (name, access);
+                       AssemblyBuilder ab = new AssemblyBuilder (name, dir, access);
                        return ab;
                }
 
@@ -298,11 +399,8 @@ namespace System {
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                public extern Assembly [] GetAssemblies ();
 
-               [MonoTODO]
-               public object GetData (string name)
-               {
-                       throw new NotImplementedException ();                   
-               }
+               [MethodImplAttribute(MethodImplOptions.InternalCall)]
+               public extern object GetData (string name);
                
                public override int GetHashCode ()
                {
@@ -310,19 +408,13 @@ namespace System {
                }
 
                [MonoTODO]
-               public object GetLifetimeService ()
-               {
-                       throw new NotImplementedException ();                   
-               }
-
-               [MonoTODO]
-               public object InitializeLifetimeService ()
+               public override object InitializeLifetimeService ()
                {
                        throw new NotImplementedException ();                   
                }
        
                [MethodImplAttribute (MethodImplOptions.InternalCall)]
-               public extern Assembly LoadAssembly (AssemblyName assemblyRef, Evidence securityEvidence);
+               private extern Assembly LoadAssembly (AssemblyName assemblyRef, Evidence securityEvidence);
 
                public Assembly Load (AssemblyName assemblyRef)
                {
@@ -412,8 +504,12 @@ namespace System {
                                                      Evidence securityInfo,
                                                      AppDomainSetup info)
                {
-                       if (friendlyName == null || securityInfo == null || info == null)
-                               throw new System.ArgumentNullException();
+                       //TODO: treat securityInfo (can be null)
+                       if (friendlyName == null)
+                               throw new System.ArgumentNullException ("friendlyName");
+
+                       if (info == null)
+                               throw new System.ArgumentNullException ("info");
 
                        AppDomain ad = createDomain (friendlyName, info);
 
@@ -443,9 +539,6 @@ namespace System {
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                public static extern void Unload (AppDomain domain);
                
-               [MethodImplAttribute(MethodImplOptions.InternalCall)]
-               public extern object GetData ();
-
                [MethodImplAttribute(MethodImplOptions.InternalCall)]
                public extern void SetData (string name, object data);
 
@@ -455,6 +548,10 @@ namespace System {
                        throw new NotImplementedException ();
                }
 
+               public override string ToString () {
+                       return getFriendlyName ();
+               }
+
 
                public event AssemblyLoadEventHandler AssemblyLoad;