Example #1
0
 internal static void ExtractCustomAttributeArgumentType(ITypeUniverse universe, Module module, byte[] customAttributeBlob, ref int index, out System.Reflection.Adds.CorElementType argumentTypeId, out Type argumentType)
 {
     argumentTypeId = SignatureUtil.ExtractElementType(customAttributeBlob, ref index);
     SignatureUtil.VerifyElementType((System.Reflection.Adds.CorElementType)((int)argumentTypeId));
     if ((int)argumentTypeId == 29)
     {
         System.Reflection.Adds.CorElementType corElementType = SignatureUtil.ExtractElementType(customAttributeBlob, ref index);
         SignatureUtil.VerifyElementType(corElementType);
         if (corElementType == (System.Reflection.Adds.CorElementType.Byref | System.Reflection.Adds.CorElementType.Modifier | System.Reflection.Adds.CorElementType.Sentinel | System.Reflection.Adds.CorElementType.ValueType | System.Reflection.Adds.CorElementType.Void | System.Reflection.Adds.CorElementType.Type))
         {
             argumentType = universe.GetBuiltInType(System.Reflection.Adds.CorElementType.Object).MakeArrayType();
             return;
         }
         argumentType = universe.GetBuiltInType(corElementType).MakeArrayType();
         return;
     }
     if ((int)argumentTypeId != 85)
     {
         if ((int)argumentTypeId == 81)
         {
             argumentType = null;
             return;
         }
         argumentType = universe.GetBuiltInType((System.Reflection.Adds.CorElementType)((int)argumentTypeId));
     }
     else
     {
         argumentType = SignatureUtil.ExtractTypeValue(universe, module, customAttributeBlob, ref index);
         if (argumentType == null)
         {
             throw new ArgumentException(MetadataStringTable.InvalidCustomAttributeFormatForEnum);
         }
     }
 }
Example #2
0
        public Type ConvertToType(ITypeUniverse universe, Module moduleContext)
        {
            CultureInfo invariantCulture = CultureInfo.InvariantCulture;

            object[] mTypeName = new object[] { this.m_TypeName, this.m_AssemblyName.FullName };
            string   str       = string.Format(invariantCulture, "{0},{1}", mTypeName);

            return(System.Reflection.Adds.TypeNameParser.ParseTypeName(universe, moduleContext, str));
        }
Example #3
0
            public static bool LookupPrimitive(Type type, out System.Reflection.Adds.CorElementType result)
            {
                result = System.Reflection.Adds.CorElementType.End;
                ITypeUniverse typeUniverse = Helpers.Universe(type);

                if (typeUniverse != null && !typeUniverse.GetSystemAssembly().Equals(type.Assembly))
                {
                    return(false);
                }
                return(SignatureUtil.TypeMapForAttributes.s_typeNameMapForAttributes.TryGetValue(type.FullName, out result));
            }
Example #4
0
        public static Type ParseTypeName(ITypeUniverse universe, Module module, string input, bool throwOnError)
        {
            Func <AssemblyName, Assembly>       func  = (AssemblyName assemblyName) => System.Reflection.Adds.TypeNameParser.DetermineAssembly(assemblyName, module, universe);
            Func <Assembly, string, bool, Type> func1 = (Assembly assembly, string simpleTypeName, bool ignoreCase) => {
                bool flag = false;
                if (assembly != null)
                {
                    return(assembly.GetType(simpleTypeName, flag, ignoreCase));
                }
                return(module.GetType(simpleTypeName, flag, ignoreCase));
            };

            return(Type.GetType(input, func, func1, throwOnError));
        }
Example #5
0
        internal static bool IsAssignableFromHelper(Type current, Type target)
        {
            if (target == null)
            {
                return(false);
            }
            if (current.Equals(target))
            {
                return(true);
            }
            if (target.IsSubclassOf(current))
            {
                return(true);
            }
            Type[] interfaces = target.GetInterfaces();
            for (int i = 0; i < (int)interfaces.Length; i++)
            {
                if (interfaces[i].Equals(current))
                {
                    return(true);
                }
                if (current.IsAssignableFrom(interfaces[i]))
                {
                    return(true);
                }
            }
            if (target.IsGenericParameter)
            {
                Type[] genericParameterConstraints = target.GetGenericParameterConstraints();
                for (int j = 0; j < (int)genericParameterConstraints.Length; j++)
                {
                    if (MetadataOnlyTypeDef.IsAssignableFromHelper(current, genericParameterConstraints[j]))
                    {
                        return(true);
                    }
                }
            }
            ITypeUniverse typeUniverse = Helpers.Universe(current);

            if (typeUniverse == null || !current.Equals(typeUniverse.GetTypeXFromName("System.Object")))
            {
                return(false);
            }
            if (target.IsPointer || target.IsInterface)
            {
                return(true);
            }
            return(target.IsArray);
        }
Example #6
0
        private bool QuickSerializationCastCheck()
        {
            ITypeUniverse typeUniverse  = Helpers.Universe(this);
            Type          typeXFromName = typeUniverse.GetTypeXFromName("System.Enum");
            Type          type          = typeUniverse.GetTypeXFromName("System.Delegate");

            for (Type i = this.UnderlyingSystemType; i != null; i = i.BaseType)
            {
                if (i.Equals(typeXFromName) || i.Equals(type))
                {
                    return(true);
                }
            }
            return(false);
        }
Example #7
0
        internal static Type ExtractTypeValue(ITypeUniverse universe, Module module, byte[] blob, ref int index)
        {
            Type   type = null;
            string str  = SignatureUtil.ExtractStringValue(blob, ref index);

            if (!string.IsNullOrEmpty(str))
            {
                type = System.Reflection.Adds.TypeNameParser.ParseTypeName(universe, module, str, false);
                if (type == null)
                {
                    module = universe.GetSystemAssembly().ManifestModule;
                    type   = System.Reflection.Adds.TypeNameParser.ParseTypeName(universe, module, str);
                }
            }
            return(type);
        }
Example #8
0
        public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile manifestModuleImport, MetadataFile[] netModuleImports, IReflectionFactory factory, string manifestFile, string[] netModuleFiles)
        {
            int length = 1;

            if (netModuleImports != null)
            {
                length = length + (int)netModuleImports.Length;
            }
            MetadataOnlyModule[] metadataOnlyModule = new MetadataOnlyModule[length];
            metadataOnlyModule[0] = new MetadataOnlyModule(typeUniverse, manifestModuleImport, factory, manifestFile);
            if (length > 1)
            {
                for (int i = 0; i < (int)netModuleImports.Length; i++)
                {
                    metadataOnlyModule[i + 1] = new MetadataOnlyModule(typeUniverse, netModuleImports[i], factory, netModuleFiles[i]);
                }
            }
            return(new MetadataOnlyAssembly(metadataOnlyModule, manifestFile));
        }
        public static IEnumerable <CustomAttributeData> GetTypeForwardedToAttributes(MetadataOnlyModule manifestModule)
        {
            ITypeUniverse assemblyResolver = manifestModule.AssemblyResolver;
            Type          builtInType      = assemblyResolver.GetBuiltInType(System.Reflection.Adds.CorElementType.Type);
            Assembly      assembly         = assemblyResolver.GetSystemAssembly();
            Type          type             = assembly.GetType("System.Runtime.CompilerServices.TypeForwardedToAttribute", false, false);

            if (type != null)
            {
                foreach (UnresolvedTypeName rawTypeForwardedToAttribute in PseudoCustomAttributes.GetRawTypeForwardedToAttributes(manifestModule))
                {
                    ConstructorInfo[] constructorInfoArray = type.GetConstructors();
                    Type type1 = rawTypeForwardedToAttribute.ConvertToType(assemblyResolver, manifestModule);
                    List <CustomAttributeTypedArgument> customAttributeTypedArguments = new List <CustomAttributeTypedArgument>(1)
                    {
                        new CustomAttributeTypedArgument(builtInType, type1)
                    };
                    List <CustomAttributeNamedArgument> customAttributeNamedArguments = new List <CustomAttributeNamedArgument>(0);
                    yield return(new MetadataOnlyCustomAttributeData(constructorInfoArray[0], customAttributeTypedArguments, customAttributeNamedArguments));
                }
            }
        }
Example #10
0
 protected AssemblyProxy(ITypeUniverse universe)
 {
     this.m_universe = universe;
 }
Example #11
0
 public MetadataExtensionsPolicy20(ITypeUniverse u)
 {
     this.m_universe = u;
 }
Example #12
0
 public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile metadataImport, IReflectionFactory factory, string manifestFile)
 {
     return(AssemblyFactory.CreateAssembly(typeUniverse, metadataImport, null, factory, manifestFile, null));
 }
Example #13
0
 public static Type ParseTypeName(ITypeUniverse universe, Module module, string input)
 {
     return(System.Reflection.Adds.TypeNameParser.ParseTypeName(universe, module, input, true));
 }
Example #14
0
        private static Assembly DetermineAssembly(AssemblyName assemblyName, Module defaultTokenResolver, ITypeUniverse universe)
        {
            Module module = defaultTokenResolver;

            if (assemblyName == null)
            {
                if (defaultTokenResolver == null)
                {
                    throw new ArgumentException(MetadataStringTable.DefaultTokenResolverRequired);
                }
                return(module.Assembly);
            }
            if (universe == null)
            {
                throw new ArgumentException(MetadataStringTable.HostSpecifierMissing);
            }
            Assembly assembly = universe.ResolveAssembly(assemblyName);

            if (assembly == null)
            {
                CultureInfo invariantCulture = CultureInfo.InvariantCulture;
                string      universeCannotResolveAssembly = MetadataStringTable.UniverseCannotResolveAssembly;
                object[]    objArray = new object[] { assemblyName };
                throw new ArgumentException(string.Format(invariantCulture, universeCannotResolveAssembly, objArray));
            }
            return(assembly);
        }
Example #15
0
 public AssemblyRef(AssemblyName name, ITypeUniverse universe) : base(universe)
 {
     this.m_name = name;
 }
Example #16
0
 public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile metadataImport, string manifestFile)
 {
     return(AssemblyFactory.CreateAssembly(typeUniverse, metadataImport, new DefaultFactory(), manifestFile));
 }
Example #17
0
 public static Assembly CreateAssembly(ITypeUniverse typeUniverse, MetadataFile manifestModuleImport, MetadataFile[] netModuleImports, string manifestFile, string[] netModuleFiles)
 {
     return(AssemblyFactory.CreateAssembly(typeUniverse, manifestModuleImport, netModuleImports, new DefaultFactory(), manifestFile, netModuleFiles));
 }
Example #18
0
        internal static IList <CustomAttributeTypedArgument> ExtractListOfValues(Type elementType, ITypeUniverse universe, Module module, uint size, byte[] blob, ref int index)
        {
            System.Reflection.Adds.CorElementType typeId = SignatureUtil.GetTypeId(elementType);
            List <CustomAttributeTypedArgument>   customAttributeTypedArguments = new List <CustomAttributeTypedArgument>((int)size);

            if (typeId == System.Reflection.Adds.CorElementType.Object)
            {
                for (int i = 0; (long)i < (ulong)size; i++)
                {
                    System.Reflection.Adds.CorElementType corElementType = SignatureUtil.ExtractElementType(blob, ref index);
                    SignatureUtil.VerifyElementType(corElementType);
                    Type   builtInType = null;
                    object obj         = null;
                    if (corElementType == System.Reflection.Adds.CorElementType.SzArray)
                    {
                        throw new NotImplementedException(MetadataStringTable.ArrayInsideArrayInAttributeNotSupported);
                    }
                    if (corElementType != System.Reflection.Adds.CorElementType.Enum)
                    {
                        builtInType = universe.GetBuiltInType(corElementType);
                        obj         = SignatureUtil.ExtractValue(corElementType, blob, ref index);
                    }
                    else
                    {
                        builtInType = SignatureUtil.ExtractTypeValue(universe, module, blob, ref index);
                        if (builtInType == null)
                        {
                            throw new ArgumentException(MetadataStringTable.InvalidCustomAttributeFormatForEnum);
                        }
                        System.Reflection.Adds.CorElementType typeId1 = SignatureUtil.GetTypeId(MetadataOnlyModule.GetUnderlyingType(builtInType));
                        obj = SignatureUtil.ExtractValue(typeId1, blob, ref index);
                    }
                    customAttributeTypedArguments.Add(new CustomAttributeTypedArgument(builtInType, obj));
                }
            }
            else if (typeId != System.Reflection.Adds.CorElementType.Type)
            {
                if (typeId == System.Reflection.Adds.CorElementType.SzArray)
                {
                    throw new ArgumentException(MetadataStringTable.JaggedArrayInAttributeNotSupported);
                }
                for (int j = 0; (long)j < (ulong)size; j++)
                {
                    object obj1 = SignatureUtil.ExtractValue(typeId, blob, ref index);
                    customAttributeTypedArguments.Add(new CustomAttributeTypedArgument(elementType, obj1));
                }
            }
            else
            {
                for (int k = 0; (long)k < (ulong)size; k++)
                {
                    object obj2 = SignatureUtil.ExtractTypeValue(universe, module, blob, ref index);
                    customAttributeTypedArguments.Add(new CustomAttributeTypedArgument(elementType, obj2));
                }
            }
            return(customAttributeTypedArguments.AsReadOnly());
        }