From: Gonzalo Paniagua Javier Date: Wed, 10 Jul 2002 01:37:47 +0000 (-0000) Subject: 2002-07-09 Gonzalo Paniagua Javier X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=93c52652df7482fda923ffe0bbf4f5192bd5b616;p=mono.git 2002-07-09 Gonzalo Paniagua Javier * Activator.cs: reformatted. Implemented CreateInstance* methods that return ObjectHandle. * AppDomain.cs: implemented CreateInstance*AndUnwrap methods. svn path=/trunk/mcs/; revision=5677 --- diff --git a/mcs/class/corlib/System/Activator.cs b/mcs/class/corlib/System/Activator.cs index 6cd28080268..68f7ef69b2d 100644 --- a/mcs/class/corlib/System/Activator.cs +++ b/mcs/class/corlib/System/Activator.cs @@ -1,124 +1,199 @@ -// -// System.Activator.cs -// -// Author: -// Nick Drochak II (ndrochak@gol.com) -// -// (C) 2001 Nick Drochak II -// - -using System.Runtime.Remoting; -using System.Reflection; -using System.Globalization; -using System.Security.Policy; - -namespace System -{ - // FIXME: This class is just stubs to get System.dll to compile - public sealed class Activator - { - private Activator () {} - - [MonoTODO] - public static ObjectHandle CreateComInstanceFrom(string assemblyName, - string typeName) { - throw new NotImplementedException(); - } - - [MonoTODO] - public static ObjectHandle CreateInstanceFrom(string assemblyFile, - string typeName) { - throw new NotImplementedException(); - } - - [MonoTODO] - public static ObjectHandle CreateInstanceFrom(string assemblyFile, - string typeName, object[] activationAttributes) { - throw new NotImplementedException(); - } - - [MonoTODO] - public static ObjectHandle CreateInstanceFrom(string assemblyFile, - string typeName, bool ignoreCase, BindingFlags bindingAttr, - Binder binder, object[] args, CultureInfo culture, object[] activationAttributes, - Evidence securityInfo) { - throw new NotImplementedException(); - } - - [MonoTODO] - public static ObjectHandle CreateInstance(string assemblyName, - string typeName) { - throw new NotImplementedException(); - } - - [MonoTODO] - public static ObjectHandle CreateInstance(string assemblyName, - string typeName, object[] activationAttributes) { - throw new NotImplementedException(); - } - - [MonoTODO] - public static ObjectHandle CreateInstance(string assemblyName, - string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, - object[] args, CultureInfo culture, object[] activationAttributes, - Evidence securityInfo) { - throw new NotImplementedException(); - } - - 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) { - Type[] atypes = new Type [args.Length]; - for (int i = 0; i < args.Length; ++i) { - atypes [i] = args [i].GetType (); - } - ConstructorInfo ctor = type.GetConstructor (atypes); - return ctor.Invoke (args); - - } - - [MonoTODO] - 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) { - 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); - return ctor.Invoke (args, bindingAttr, binder, args, culture); - } - - [MonoTODO] - public static object CreateInstance(Type type, bool nonPublic) { - ConstructorInfo ctor = type.GetConstructor (Type.EmptyTypes); - 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(); - } - } -} +// +// 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(); + } + } +} + diff --git a/mcs/class/corlib/System/AppDomain.cs b/mcs/class/corlib/System/AppDomain.cs index 31cc6bcca04..0b1837a90cd 100755 --- a/mcs/class/corlib/System/AppDomain.cs +++ b/mcs/class/corlib/System/AppDomain.cs @@ -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, diff --git a/mcs/class/corlib/System/ChangeLog b/mcs/class/corlib/System/ChangeLog index 25a57ea72b6..ff00aa3680e 100644 --- a/mcs/class/corlib/System/ChangeLog +++ b/mcs/class/corlib/System/ChangeLog @@ -1,3 +1,10 @@ +2002-07-09 Gonzalo Paniagua Javier + + * Activator.cs: reformatted. Implemented CreateInstance* methods + that return ObjectHandle. + + * AppDomain.cs: implemented CreateInstance*AndUnwrap methods. + 2002-07-03 Nick Drochak * Decimal.cs (Divide): Short cut the case where the dividend is 0 (and