public static string GetContainingModuleName(this TypeDefinitionHandle typeDefHandle, MetadataReader reader)
        {
            var typeDef = typeDefHandle.GetTypeDefinition(reader);

            Handle currentHandle = !typeDef.EnclosingType.IsNull(reader) ? (Handle)typeDef.EnclosingType : (Handle)typeDef.NamespaceDefinition;

            Debug.Assert(!currentHandle.IsNull(reader));

            while (!currentHandle.IsNull(reader))
            {
                switch (currentHandle.HandleType)
                {
                case HandleType.TypeDefinition:
                    typeDef       = currentHandle.ToTypeDefinitionHandle(reader).GetTypeDefinition(reader);
                    currentHandle = !typeDef.EnclosingType.IsNull(reader) ? (Handle)typeDef.EnclosingType : (Handle)typeDef.NamespaceDefinition;
                    break;

                case HandleType.NamespaceDefinition:
                    currentHandle = currentHandle.ToNamespaceDefinitionHandle(reader).GetNamespaceDefinition(reader).ParentScopeOrNamespace;
                    break;

                case HandleType.ScopeDefinition:
                    return(currentHandle.GetFullName(reader));

                default:
                    return("?");
                }
            }

            return("?");
        }
Пример #2
0
 private NativeFormatRuntimeNamedTypeInfo(MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle, RuntimeTypeHandle typeHandle) :
     base(typeHandle)
 {
     _reader = reader;
     _typeDefinitionHandle = typeDefinitionHandle;
     _typeDefinition       = _typeDefinitionHandle.GetTypeDefinition(reader);
 }
Пример #3
0
 private RuntimeNamedTypeInfo(MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle, RuntimeTypeHandle typeHandle)
 {
     _reader = reader;
     _typeDefinitionHandle = typeDefinitionHandle;
     _typeDefinition       = _typeDefinitionHandle.GetTypeDefinition(reader);
     _typeHandle           = typeHandle;
 }
        public sealed override IEnumerable <CustomAttributeData> GetPsuedoCustomAttributes(MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle)
        {
            TypeAttributes attributes = typeDefinitionHandle.GetTypeDefinition(reader).Flags;

            if (0 != (attributes & TypeAttributes.Import))
            {
                yield return(ReflectionCoreExecution.ExecutionDomain.GetCustomAttributeData(typeof(ComImportAttribute), null, null));
            }
        }
        public static void GetFullName(this TypeDefinitionHandle typeDefHandle, MetadataReader reader, out string name, out string enclosing, out string nspace)
        {
            var typeDef = typeDefHandle.GetTypeDefinition(reader);

            Debug.Assert(!typeDef.Name.IsNull(reader));

            name      = typeDef.Name.GetConstantStringValue(reader).Value;
            enclosing = typeDef.EnclosingType.IsNull(reader) ? null : typeDef.EnclosingType.GetFullName(reader);
            nspace    = typeDef.NamespaceDefinition.IsNull(reader) ? null : typeDef.NamespaceDefinition.GetFullName(reader);
        }
Пример #6
0
        internal EcmaDefinitionType(TypeDefinitionHandle handle, EcmaModule module)
            : base()
        {
            Debug.Assert(module != null);
            Debug.Assert(!handle.IsNil);

            _module = module;
            _handle = handle;
            _neverAccessThisExceptThroughTypeDefinitionProperty = handle.GetTypeDefinition(Reader);
        }
        public sealed override IEnumerable <CustomAttributeData> GetPsuedoCustomAttributes(MetadataReader reader, FieldHandle fieldHandle, TypeDefinitionHandle declaringTypeHandle)
        {
            TypeAttributes layoutKind = declaringTypeHandle.GetTypeDefinition(reader).Flags & TypeAttributes.LayoutMask;

            if (layoutKind == TypeAttributes.ExplicitLayout)
            {
                int offset = (int)(fieldHandle.GetField(reader).Offset);
                CustomAttributeTypedArgument offsetArgument = ExtensibleCustomAttributeData.CreateCustomAttributeTypedArgument(typeof(Int32), offset);
                yield return(ReflectionCoreExecution.ExecutionDomain.GetCustomAttributeData(typeof(FieldOffsetAttribute), new CustomAttributeTypedArgument[] { offsetArgument }, null));
            }
        }
        protected RuntimeInspectionOnlyNamedType(MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle)
            : base()
        {
#if DEBUG
            if (!(this.InternalViolatesTypeIdentityRules))
            {
                RuntimeTypeHandle runtimeTypeHandle;
                if (ReflectionCoreExecution.ExecutionEnvironment.TryGetNamedTypeForMetadata(reader, typeDefinitionHandle, out runtimeTypeHandle))
                    Debug.Assert(false, "Type identity violation: You must use a RuntimeEENamedType to represent this type as RH has generated an EEType for it.");
            }
#endif
            _reader = reader;
            _typeDefinitionHandle = typeDefinitionHandle;
            _typeDefinition = _typeDefinitionHandle.GetTypeDefinition(_reader);
        }
        protected RuntimeInspectionOnlyNamedType(MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle)
            : base()
        {
#if DEBUG
            if (!(this.InternalViolatesTypeIdentityRules))
            {
                RuntimeTypeHandle runtimeTypeHandle;
                if (ReflectionCoreExecution.ExecutionEnvironment.TryGetNamedTypeForMetadata(reader, typeDefinitionHandle, out runtimeTypeHandle))
                {
                    Debug.Assert(false, "Type identity violation: You must use a RuntimeEENamedType to represent this type as RH has generated an EEType for it.");
                }
            }
#endif
            _reader = reader;
            _typeDefinitionHandle = typeDefinitionHandle;
            _typeDefinition       = _typeDefinitionHandle.GetTypeDefinition(_reader);
        }
Пример #10
0
        public static string GetFullName(this TypeDefinitionHandle typeDefHandle, MetadataReader reader)
        {
            var typeDef = typeDefHandle.GetTypeDefinition(reader);

            Debug.Assert(!typeDef.Name.IsNull(reader));

            var name      = typeDef.Name.GetConstantStringValue(reader).Value;
            var enclosing = typeDef.EnclosingType.IsNull(reader) ? null : typeDef.EnclosingType.GetFullName(reader);
            var nspace    = typeDef.NamespaceDefinition.IsNull(reader) ? null : typeDef.NamespaceDefinition.GetFullName(reader);

            if (enclosing != null && name != null)
            {
                return(enclosing + "+" + name);
            }
            else if (nspace != null && name != null)
            {
                return(nspace + "." + name);
            }

            return(name);
        }
        private static String GetTypeFullNameFromTypeDef(TypeDefinitionHandle typeDefinitionHandle, MetadataReader reader, List <int> genericParameterOffsets)
        {
            String s = "";

            TypeDefinition typeDefinition = typeDefinitionHandle.GetTypeDefinition(reader);

            s = typeDefinition.Name.GetString(reader);

            TypeDefinitionHandle enclosingTypeDefHandle = typeDefinition.EnclosingType;

            if (!enclosingTypeDefHandle.IsNull(reader))
            {
                String containingTypeName = GetTypeFullNameFromTypeDef(enclosingTypeDefHandle, reader, genericParameterOffsets);
                s = containingTypeName + "." + s;
            }
            else
            {
                NamespaceDefinitionHandle namespaceHandle = typeDefinition.NamespaceDefinition;
                for (;;)
                {
                    NamespaceDefinition namespaceDefinition = namespaceHandle.GetNamespaceDefinition(reader);
                    String namespacePart = namespaceDefinition.Name.GetStringOrNull(reader);
                    if (namespacePart == null)
                    {
                        break; // Reached the root namespace.
                    }
                    s = namespacePart + "." + s;
                    if (namespaceDefinition.ParentScopeOrNamespace.HandleType != HandleType.NamespaceDefinition)
                    {
                        break; // Should have reached the root namespace first but this helper is for ToString() - better to
                    }
                    // return partial information than crash.
                    namespaceHandle = namespaceDefinition.ParentScopeOrNamespace.ToNamespaceDefinitionHandle(reader);
                }
            }
            return(ConvertBackTickNameToNameWithReducerInputFormat(s, genericParameterOffsets));
        }
Пример #12
0
        private static string GetTypeFullNameFromTypeDef(TypeDefinitionHandle typeDefinitionHandle, MetadataReader reader)
        {
            string s;

            TypeDefinition typeDefinition = typeDefinitionHandle.GetTypeDefinition(reader);

            s = typeDefinition.Name.GetString(reader);

            TypeDefinitionHandle enclosingTypeDefHandle = typeDefinition.EnclosingType;

            if (!enclosingTypeDefHandle.IsNull(reader))
            {
                string containingTypeName = GetTypeFullNameFromTypeDef(enclosingTypeDefHandle, reader);
                s = containingTypeName + "+" + s;
            }
            else
            {
                NamespaceDefinitionHandle namespaceHandle = typeDefinition.NamespaceDefinition;
                for (;;)
                {
                    NamespaceDefinition namespaceDefinition = namespaceHandle.GetNamespaceDefinition(reader);
                    string namespacePart = namespaceDefinition.Name.GetStringOrNull(reader);
                    if (namespacePart == null)
                    {
                        break; // Reached the root namespace.
                    }
                    s = namespacePart + "." + s;
                    if (namespaceDefinition.ParentScopeOrNamespace.HandleType != HandleType.NamespaceDefinition)
                    {
                        break; // Should have reached the root namespace first but this helper is for ToString() - better to
                    }
                    // return partial information than crash.
                    namespaceHandle = namespaceDefinition.ParentScopeOrNamespace.ToNamespaceDefinitionHandle(reader);
                }
            }
            return(s);
        }
 public NativeFormatEnumInfoImplementation(Type enumType, MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle) : base(enumType)
 {
     _reader         = reader;
     _typeDefinition = typeDefinitionHandle.GetTypeDefinition(reader);
 }
Пример #14
0
        private static String GetTypeFullNameFromTypeDef(TypeDefinitionHandle typeDefinitionHandle, MetadataReader reader, List<int> genericParameterOffsets)
        {
            String s = "";

            TypeDefinition typeDefinition = typeDefinitionHandle.GetTypeDefinition(reader);
            s = typeDefinition.Name.GetString(reader);

            TypeDefinitionHandle enclosingTypeDefHandle = typeDefinition.EnclosingType;
            if (!enclosingTypeDefHandle.IsNull(reader))
            {
                String containingTypeName = GetTypeFullNameFromTypeDef(enclosingTypeDefHandle, reader, genericParameterOffsets);
                s = containingTypeName + "." + s;
            }
            else
            {
                NamespaceDefinitionHandle namespaceHandle = typeDefinition.NamespaceDefinition;
                for (; ;)
                {
                    NamespaceDefinition namespaceDefinition = namespaceHandle.GetNamespaceDefinition(reader);
                    String namespacePart = namespaceDefinition.Name.GetStringOrNull(reader);
                    if (namespacePart == null)
                        break; // Reached the root namespace.
                    s = namespacePart + "." + s;
                    if (namespaceDefinition.ParentScopeOrNamespace.HandleType != HandleType.NamespaceDefinition)
                        break; // Should have reached the root namespace first but this helper is for ToString() - better to
                    // return partial information than crash.
                    namespaceHandle = namespaceDefinition.ParentScopeOrNamespace.ToNamespaceDefinitionHandle(reader);
                }
            }
            return ConvertBackTickNameToNameWithReducerInputFormat(s, genericParameterOffsets);
        }
Пример #15
0
        private static String NonQualifiedTypeName(this Type type)
        {
            RuntimeType runtimeType = type as RuntimeType;

            if (runtimeType == null)
            {
                return(null);
            }

            if (runtimeType.HasElementType)
            {
                String elementTypeName = runtimeType.InternalRuntimeElementType.NonQualifiedTypeName();
                if (elementTypeName == null)
                {
                    return(null);
                }
                String suffix;
                if (runtimeType.IsArray)
                {
                    int rank = runtimeType.GetArrayRank();
                    if (rank == 1)
                    {
                        suffix = "[" + (runtimeType.InternalIsMultiDimArray ? "*" : "") + "]";
                    }
                    else
                    {
                        suffix = "[" + new String(',', rank - 1) + "]";
                    }
                }
                else if (runtimeType.IsByRef)
                {
                    suffix = "&";
                }
                else if (runtimeType.IsPointer)
                {
                    suffix = "*";
                }
                else
                {
                    return(null);
                }

                return(elementTypeName + suffix);
            }
            else if (runtimeType.IsGenericParameter)
            {
                return(null);
            }
            else if (runtimeType.IsConstructedGenericType)
            {
                StringBuilder sb = new StringBuilder();
                String        genericTypeDefinitionTypeName = runtimeType.GetGenericTypeDefinition().NonQualifiedTypeName();
                if (genericTypeDefinitionTypeName == null)
                {
                    return(null);
                }
                sb.Append(genericTypeDefinitionTypeName);
                sb.Append("[");
                String sep = "";
                foreach (RuntimeType ga in runtimeType.InternalRuntimeGenericTypeArguments)
                {
                    String gaTypeName = ga.AssemblyQualifiedTypeName();
                    if (gaTypeName == null)
                    {
                        return(null);
                    }
                    sb.Append(sep + "[" + gaTypeName + "]");
                    sep = ",";
                }
                sb.Append("]");

                return(sb.ToString());
            }
            else
            {
                RuntimeNamedTypeInfo runtimeNamedTypeInfo = type.GetTypeInfo() as RuntimeNamedTypeInfo;
                if (runtimeNamedTypeInfo == null)
                {
                    return(null);
                }
                MetadataReader reader = runtimeNamedTypeInfo.Reader;

                String s = "";
                TypeDefinitionHandle      typeDefinitionHandle = runtimeNamedTypeInfo.TypeDefinitionHandle;
                NamespaceDefinitionHandle namespaceDefinitionHandle;
                do
                {
                    TypeDefinition typeDefinition = typeDefinitionHandle.GetTypeDefinition(reader);
                    String         name           = typeDefinition.Name.GetString(reader);
                    if (s == "")
                    {
                        s = name;
                    }
                    else
                    {
                        s = name + "+" + s;
                    }
                    namespaceDefinitionHandle = typeDefinition.NamespaceDefinition;
                    typeDefinitionHandle      = typeDefinition.EnclosingType;
                }while (!typeDefinitionHandle.IsNull(reader));

                NamespaceChain namespaceChain = new NamespaceChain(reader, namespaceDefinitionHandle);
                String         ns             = namespaceChain.NameSpace;
                if (ns != null)
                {
                    s = ns + "." + s;
                }
                return(s);
            }
        }
 public sealed override IEnumerable<CustomAttributeData> GetPsuedoCustomAttributes(MetadataReader reader, FieldHandle fieldHandle, TypeDefinitionHandle declaringTypeHandle)
 {
     TypeAttributes layoutKind = declaringTypeHandle.GetTypeDefinition(reader).Flags & TypeAttributes.LayoutMask;
     if (layoutKind == TypeAttributes.ExplicitLayout)
     {
         int offset = (int)(fieldHandle.GetField(reader).Offset);
         CustomAttributeTypedArgument offsetArgument = ExtensibleCustomAttributeData.CreateCustomAttributeTypedArgument(typeof(Int32), offset);
         yield return ReflectionCoreExecution.ExecutionDomain.GetCustomAttributeData(typeof(FieldOffsetAttribute), new CustomAttributeTypedArgument[] { offsetArgument }, null);
     }
 }
Пример #17
0
 public EnumInfoImplementation(Type enumType, MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle)
 {
     _enumType       = enumType;
     _reader         = reader;
     _typeDefinition = typeDefinitionHandle.GetTypeDefinition(reader);
 }
 public sealed override IEnumerable<CustomAttributeData> GetPsuedoCustomAttributes(MetadataReader reader, TypeDefinitionHandle typeDefinitionHandle)
 {
     TypeAttributes attributes = typeDefinitionHandle.GetTypeDefinition(reader).Flags;
     if (0 != (attributes & TypeAttributes.Import))
         yield return ReflectionCoreExecution.ExecutionDomain.GetCustomAttributeData(typeof(ComImportAttribute), null, null);
 }