diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2017-04-13 14:17:19 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2017-04-13 14:17:19 +0900 |
commit | a56e30c8d33048216567753d9d3fefc2152af8ac (patch) | |
tree | 7e5d979695fc4a431740982eb1cfecc2898b23a5 /src/mscorlib/src/System/Activator.cs | |
parent | 4b11dc566a5bbfa1378d6266525c281b028abcc8 (diff) | |
download | coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.gz coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.tar.bz2 coreclr-a56e30c8d33048216567753d9d3fefc2152af8ac.zip |
Imported Upstream version 2.0.0.11353upstream/2.0.0.11353
Diffstat (limited to 'src/mscorlib/src/System/Activator.cs')
-rw-r--r-- | src/mscorlib/src/System/Activator.cs | 133 |
1 files changed, 73 insertions, 60 deletions
diff --git a/src/mscorlib/src/System/Activator.cs b/src/mscorlib/src/System/Activator.cs index 323fbba9cc..34c6ea5874 100644 --- a/src/mscorlib/src/System/Activator.cs +++ b/src/mscorlib/src/System/Activator.cs @@ -11,8 +11,9 @@ // // // -namespace System { +namespace System +{ using System; using System.Reflection; using System.Runtime.Remoting; @@ -29,9 +30,9 @@ namespace System { // Only statics, does not need to be marked with the serializable attribute public sealed class Activator { - internal const int LookupMask = 0x000000FF; - internal const BindingFlags ConLookup = (BindingFlags) (BindingFlags.Instance | BindingFlags.Public); - internal const BindingFlags ConstructorDefault= BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance; + internal const int LookupMask = 0x000000FF; + internal const BindingFlags ConLookup = (BindingFlags)(BindingFlags.Instance | BindingFlags.Public); + internal const BindingFlags ConstructorDefault = BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance; // This class only contains statics, so hide the worthless constructor private Activator() @@ -47,12 +48,12 @@ namespace System { BindingFlags bindingAttr, Binder binder, Object[] args, - CultureInfo culture) + CultureInfo culture) { return CreateInstance(type, bindingAttr, binder, args, culture, null); } - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod static public Object CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, @@ -65,23 +66,24 @@ namespace System { Contract.EndContractBlock(); if (type is System.Reflection.Emit.TypeBuilder) - throw new NotSupportedException(Environment.GetResourceString("NotSupported_CreateInstanceWithTypeBuilder")); + throw new NotSupportedException(SR.NotSupported_CreateInstanceWithTypeBuilder); // If they didn't specify a lookup, then we will provide the default lookup. - if ((bindingAttr & (BindingFlags) LookupMask) == 0) + if ((bindingAttr & (BindingFlags)LookupMask) == 0) bindingAttr |= Activator.ConstructorDefault; - if (activationAttributes != null && activationAttributes.Length > 0){ - throw new PlatformNotSupportedException(Environment.GetResourceString("NotSupported_ActivAttr" )); + if (activationAttributes != null && activationAttributes.Length > 0) + { + throw new PlatformNotSupportedException(SR.NotSupported_ActivAttr); } RuntimeType rt = type.UnderlyingSystemType as RuntimeType; if (rt == null) - throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), nameof(type)); + throw new ArgumentException(SR.Arg_MustBeType, nameof(type)); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; - return rt.CreateInstanceImpl(bindingAttr,binder,args,culture,activationAttributes, ref stackMark); + return rt.CreateInstanceImpl(bindingAttr, binder, args, culture, activationAttributes, ref stackMark); } static public Object CreateInstance(Type type, params Object[] args) @@ -98,14 +100,14 @@ namespace System { Object[] args, Object[] activationAttributes) { - return CreateInstance(type, - Activator.ConstructorDefault, - null, - args, - null, - activationAttributes); + return CreateInstance(type, + Activator.ConstructorDefault, + null, + args, + null, + activationAttributes); } - + static public Object CreateInstance(Type type) { return Activator.CreateInstance(type, false); @@ -116,13 +118,13 @@ namespace System { * types to be created remotely without having to load the type locally. */ - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod static public ObjectHandle CreateInstance(String assemblyName, String typeName) { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return CreateInstance(assemblyName, - typeName, + typeName, false, Activator.ConstructorDefault, null, @@ -133,15 +135,15 @@ namespace System { ref stackMark); } - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod static public ObjectHandle CreateInstance(String assemblyName, String typeName, Object[] activationAttributes) - + { StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return CreateInstance(assemblyName, - typeName, + typeName, false, Activator.ConstructorDefault, null, @@ -151,8 +153,8 @@ namespace System { null, ref stackMark); } - - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod static public Object CreateInstance(Type type, bool nonPublic) { if ((object)type == null) @@ -162,13 +164,13 @@ namespace System { RuntimeType rt = type.UnderlyingSystemType as RuntimeType; if (rt == null) - throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), nameof(type)); + throw new ArgumentException(SR.Arg_MustBeType, nameof(type)); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; return rt.CreateInstanceDefaultCtor(!nonPublic, false, true, ref stackMark); } - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod static public T CreateInstance<T>() { RuntimeType rt = typeof(T) as RuntimeType; @@ -176,7 +178,7 @@ namespace System { // This is a workaround to maintain compatibility with V2. Without this we would throw a NotSupportedException for void[]. // Array, Ref, and Pointer types don't have default constructors. if (rt.HasElementType) - throw new MissingMethodException(Environment.GetResourceString("Arg_NoDefCTor")); + throw new MissingMethodException(SR.Arg_NoDefCTor); StackCrawlMark stackMark = StackCrawlMark.LookForMyCaller; @@ -186,7 +188,7 @@ namespace System { static public ObjectHandle CreateInstanceFrom(String assemblyFile, String typeName) - + { return CreateInstanceFrom(assemblyFile, typeName, null); } @@ -194,10 +196,10 @@ namespace System { static public ObjectHandle CreateInstanceFrom(String assemblyFile, String typeName, Object[] activationAttributes) - + { return CreateInstanceFrom(assemblyFile, - typeName, + typeName, false, Activator.ConstructorDefault, null, @@ -206,7 +208,7 @@ namespace System { activationAttributes); } - [MethodImplAttribute(MethodImplOptions.NoInlining)] // Methods containing StackCrawlMark local var has to be marked non-inlineable + [System.Security.DynamicSecurityMethod] // Methods containing StackCrawlMark local var has to be marked DynamicSecurityMethod public static ObjectHandle CreateInstance(string assemblyName, string typeName, bool ignoreCase, @@ -229,10 +231,10 @@ namespace System { ref stackMark); } - static internal ObjectHandle CreateInstance(String assemblyString, - String typeName, + static internal ObjectHandle CreateInstance(String assemblyString, + String typeName, bool ignoreCase, - BindingFlags bindingAttr, + BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, @@ -242,18 +244,26 @@ namespace System { { Type type = null; Assembly assembly = null; - if (assemblyString == null) { + if (assemblyString == null) + { assembly = RuntimeAssembly.GetExecutingAssembly(ref stackMark); - } else { + } + else + { RuntimeAssembly assemblyFromResolveEvent; AssemblyName assemblyName = RuntimeAssembly.CreateAssemblyName(assemblyString, false /*forIntrospection*/, out assemblyFromResolveEvent); - if (assemblyFromResolveEvent != null) { + if (assemblyFromResolveEvent != null) + { // Assembly was resolved via AssemblyResolve event assembly = assemblyFromResolveEvent; - } else if (assemblyName.ContentType == AssemblyContentType.WindowsRuntime) { + } + else if (assemblyName.ContentType == AssemblyContentType.WindowsRuntime) + { // WinRT type - we have to use Type.GetType type = Type.GetType(typeName + ", " + assemblyString, true /*throwOnError*/, ignoreCase); - } else { + } + else + { // Classic managed type assembly = RuntimeAssembly.InternalLoadAssemblyName( assemblyName, securityInfo, null, ref stackMark, @@ -261,14 +271,15 @@ namespace System { } } - if (type == null) { + if (type == null) + { // It's classic managed type (not WinRT type) Log(assembly != null, "CreateInstance:: ", "Loaded " + assembly.FullName, "Failed to Load: " + assemblyString); - if(assembly == null) return null; + if (assembly == null) return null; type = assembly.GetType(typeName, true /*throwOnError*/, ignoreCase); } - + Object o = Activator.CreateInstance(type, bindingAttr, binder, @@ -277,9 +288,10 @@ namespace System { activationAttributes); Log(o != null, "CreateInstance:: ", "Created Instance of class " + typeName, "Failed to create instance of class " + typeName); - if(o == null) + if (o == null) return null; - else { + else + { ObjectHandle Handle = new ObjectHandle(o); return Handle; } @@ -306,9 +318,9 @@ namespace System { } private static ObjectHandle CreateInstanceFromInternal(String assemblyFile, - String typeName, + String typeName, bool ignoreCase, - BindingFlags bindingAttr, + BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, @@ -319,7 +331,7 @@ namespace System { Assembly assembly = Assembly.LoadFrom(assemblyFile, securityInfo); #pragma warning restore 618 Type t = assembly.GetType(typeName, true, ignoreCase); - + Object o = Activator.CreateInstance(t, bindingAttr, binder, @@ -328,9 +340,10 @@ namespace System { activationAttributes); Log(o != null, "CreateInstanceFrom:: ", "Created Instance of class " + typeName, "Failed to create instance of class " + typeName); - if(o == null) + if (o == null) return null; - else { + else + { ObjectHandle Handle = new ObjectHandle(o); return Handle; } @@ -343,30 +356,29 @@ namespace System { typeName, null, AssemblyHashAlgorithm.None); - } - + public static ObjectHandle CreateComInstanceFrom(String assemblyName, String typeName, - byte[] hashValue, + byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm) { Assembly assembly = Assembly.LoadFrom(assemblyName, hashValue, hashAlgorithm); Type t = assembly.GetType(typeName, true, false); - Object[] Attr = t.GetCustomAttributes(typeof(ComVisibleAttribute),false); + Object[] Attr = t.GetCustomAttributes(typeof(ComVisibleAttribute), false); if (Attr.Length > 0) { if (((ComVisibleAttribute)Attr[0]).Value == false) - throw new TypeLoadException(Environment.GetResourceString( "Argument_TypeMustBeVisibleFromCom" )); + throw new TypeLoadException(SR.Argument_TypeMustBeVisibleFromCom); } Log(assembly != null, "CreateInstance:: ", "Loaded " + assembly.FullName, "Failed to Load: " + assemblyName); - if(assembly == null) return null; + if (assembly == null) return null; + - Object o = Activator.CreateInstance(t, Activator.ConstructorDefault, null, @@ -375,9 +387,10 @@ namespace System { null); Log(o != null, "CreateInstance:: ", "Created Instance of class " + typeName, "Failed to create instance of class " + typeName); - if(o == null) + if (o == null) return null; - else { + else + { ObjectHandle Handle = new ObjectHandle(o); return Handle; } |