Example #1
0
        internal MethodImplementation(MetadataImage image, MetadataRow <uint, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            var tableStream = image.Header.GetStream <TableStream>();
            var encoder     = tableStream.GetIndexEncoder(CodedIndex.MethodDefOrRef);

            _class = new LazyValue <TypeDefinition>(() =>
            {
                var table = tableStream.GetTable(MetadataTokenType.TypeDef);
                return(table.TryGetRow((int)(row.Column1 - 1), out var typeRow)
                    ? (TypeDefinition)table.GetMemberFromRow(image, typeRow)
                    : null);
            });

            _methodBody = new LazyValue <IMethodDefOrRef>(() =>
            {
                var methodBodyToken = encoder.DecodeIndex(row.Column2);
                return(image.TryResolveMember(methodBodyToken, out var member) ? (IMethodDefOrRef)member : null);
            });

            _methodDeclaration = new LazyValue <IMethodDefOrRef>(() =>
            {
                var declarationToken = encoder.DecodeIndex(row.Column3);
                return(image.TryResolveMember(declarationToken, out var member) ? (IMethodDefOrRef)member : null);
            });
        }
Example #2
0
        internal CustomAttribute(MetadataImage image, MetadataRow <uint, uint, uint> row)
            : base(row.MetadataToken)
        {
            var tableStream = image.Header.GetStream <TableStream>();

            _parent = new LazyValue <IHasCustomAttribute>(() =>
            {
                var parentToken = tableStream.GetIndexEncoder(CodedIndex.HasCustomAttribute).DecodeIndex(row.Column1);
                IMetadataMember member;
                return(image.TryResolveMember(parentToken, out member)
                    ? (IHasCustomAttribute)member
                    : null);
            });

            _constructor = new LazyValue <ICustomAttributeType>(() =>
            {
                var ctorToken = tableStream.GetIndexEncoder(CodedIndex.CustomAttributeType).DecodeIndex(row.Column2);
                IMetadataMember member;
                return(image.TryResolveMember(ctorToken, out member)
                    ? (ICustomAttributeType)member
                    : null);
            });

            _signature = new LazyValue <CustomAttributeSignature>(() => CustomAttributeSignature.FromReader(
                                                                      this,
                                                                      tableStream.MetadataHeader.GetStream <BlobStream>().CreateBlobReader(row.Column3),
                                                                      true));
        }
Example #3
0
        internal ImplementationMap(MetadataImage image, MetadataRow <ImplementationMapAttributes, uint, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            var tableStream = image.Header.GetStream <TableStream>();

            Attributes = row.Column1;

            _memberForwarded = new LazyValue <IMemberForwarded>(() =>
            {
                var memberForwardedToken = tableStream.GetIndexEncoder(CodedIndex.MemberForwarded).DecodeIndex(row.Column2);
                return(image.TryResolveMember(memberForwardedToken, out var member)
                    ? (IMemberForwarded)member
                    : null);
            });

            _importName = new LazyValue <string>(() =>
                                                 image.Header.GetStream <StringStream>().GetStringByOffset(row.Column3));

            _importScope = new LazyValue <ModuleReference>(() =>
            {
                var table = tableStream.GetTable(MetadataTokenType.ModuleRef);
                return(table.TryGetRow((int)(row.Column4 - 1), out var moduleRow)
                    ? (ModuleReference)table.GetMemberFromRow(image, moduleRow)
                    : null);
            });
        }
Example #4
0
        internal ManifestResource(MetadataImage image, MetadataRow <uint, ManifestResourceAttributes, uint, uint> row)
            : base(row.MetadataToken)
        {
            Owner      = image.Assembly;
            Offset     = row.Column1;
            Attributes = row.Column2;

            _name = new LazyValue <string>(() =>
                                           image.Header.GetStream <StringStream>().GetStringByOffset(row.Column3));

            _implementation = new LazyValue <IImplementation>(() =>
            {
                var encoder             = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.Implementation);
                var implementationToken = encoder.DecodeIndex(row.Column4);
                IMetadataMember member;
                return(image.TryResolveMember(implementationToken, out member)
                    ? (IImplementation)member
                    : null);
            });

            _data = new LazyValue <byte[]>(() =>
                                           IsEmbedded && Image != null
                ? Image.Header.NetDirectory.ResourcesManifest.GetResourceData(Offset)
                : null);

            CustomAttributes = new CustomAttributeCollection(this);
        }
Example #5
0
        public TypeReference(MetadataImage image, MetadataRow <uint, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            var stringStream = image.Header.GetStream <StringStream>();
            var tableStream  = image.Header.GetStream <TableStream>();

            _resolutionScope = new LazyValue <IResolutionScope>(() =>
            {
                var resolutionScopeToken = tableStream.GetIndexEncoder(CodedIndex.ResolutionScope).DecodeIndex(row.Column1);
                IMetadataMember resolutionScope;
                return(image.TryResolveMember(resolutionScopeToken, out resolutionScope)
                    ? resolutionScope as IResolutionScope
                    : null);
            });

            _name = new LazyValue <string>(() =>
            {
                return(stringStream.GetStringByOffset(row.Column2));
            });
            _namespace = new LazyValue <string>(() =>
            {
                return(stringStream.GetStringByOffset(row.Column3));
            });

            CustomAttributes = new CustomAttributeCollection(this);
        }
Example #6
0
        internal EventDefinition(MetadataImage image, MetadataRow <EventAttributes, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image     = image;
            Attributes = row.Column1;
            _name      = new LazyValue <string>(() => image.Header.GetStream <StringStream>().GetStringByOffset(row.Column2));

            _eventType = new LazyValue <ITypeDefOrRef>(() =>
            {
                var enoder         = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.TypeDefOrRef);
                var eventTypeToken = enoder.DecodeIndex(row.Column3);
                IMetadataMember member;
                return(image.TryResolveMember(eventTypeToken, out member) ? (ITypeDefOrRef)member : null);
            });

            _eventMap = new LazyValue <EventMap>(() =>
            {
                var table  = image.Header.GetStream <TableStream>().GetTable(MetadataTokenType.EventMap);
                var mapRow = table.GetRowClosestToKey(1, row.MetadataToken.Rid);
                return(mapRow != null ? (EventMap)table.GetMemberFromRow(image, mapRow) : null);
            });

            CustomAttributes = new CustomAttributeCollection(this);
            Semantics        = new MethodSemanticsCollection(this);
        }
        internal MethodSpecification(MetadataImage image, MetadataRow <uint, uint> row)
            : base(row.MetadataToken)
        {
            _image  = image;
            _method = new LazyValue <IMethodDefOrRef>(() =>
            {
                var encoder     = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.MethodDefOrRef);
                var methodToken = encoder.DecodeIndex(row.Column1);

                return(image.TryResolveMember(methodToken, out var member) ? (IMethodDefOrRef)member : null);
            });

            _signature = new LazyValue <GenericInstanceMethodSignature>(() =>
                                                                        GenericInstanceMethodSignature.FromReader(image, image.Header.GetStream <BlobStream>().CreateBlobReader(row.Column2)));

            CustomAttributes = new CustomAttributeCollection(this);
        }
Example #8
0
        internal GenericParameter(MetadataImage image, MetadataRow <ushort, GenericParameterAttributes, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image     = image;
            Index      = row.Column1;
            Attributes = row.Column2;

            _owner = new LazyValue <IGenericParameterProvider>(() =>
            {
                var encoder    = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.TypeOrMethodDef);
                var ownerToken = encoder.DecodeIndex(row.Column3);
                return(image.TryResolveMember(ownerToken, out var member) ? (IGenericParameterProvider)member : null);
            });

            _name       = new LazyValue <string>(() => image.Header.GetStream <StringStream>().GetStringByOffset(row.Column4));
            Constraints = new GenericParameterConstraintCollection(this);
        }
        internal GenericParameterConstraint(MetadataImage image, MetadataRow <uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            _owner = new LazyValue <GenericParameter>(() =>
            {
                var table = image.Header.GetStream <TableStream>().GetTable(MetadataTokenType.GenericParam);
                return(table.TryGetRow((int)(row.Column1 - 1), out var paramRow)
                    ? (GenericParameter)table.GetMemberFromRow(image, paramRow)
                    : null);
            });

            _constraint = new LazyValue <ITypeDefOrRef>(() =>
            {
                var encoder         = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.TypeDefOrRef);
                var constraintToken = encoder.DecodeIndex(row.Column2);
                return(image.TryResolveMember(constraintToken, out var member) ? (ITypeDefOrRef)member : null);
            });
        }
Example #10
0
        internal MethodSemantics(MetadataImage image, MetadataRow <MethodSemanticsAttributes, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            var tableStream = image.Header.GetStream <TableStream>();

            Attributes = row.Column1;

            _method = new LazyValue <MethodDefinition>(() =>
            {
                var methodTable = tableStream.GetTable(MetadataTokenType.Method);
                var methodRow   = methodTable.GetRow((int)(row.Column2 - 1));
                return((MethodDefinition)methodTable.GetMemberFromRow(image, methodRow));
            });

            _association = new LazyValue <IHasSemantics>(() =>
            {
                var associationToken = tableStream.GetIndexEncoder(CodedIndex.HasSemantics).DecodeIndex(row.Column3);
                return(image.TryResolveMember(associationToken, out var member) ? (IHasSemantics)member : null);
            });
        }
        internal InterfaceImplementation(MetadataImage image, MetadataRow <uint, uint> row)
            : base(row.MetadataToken)
        {
            _image = image;
            var tableStream = image.Header.GetStream <TableStream>();

            _class = new LazyValue <TypeDefinition>(() =>
            {
                var table = tableStream.GetTable(MetadataTokenType.TypeDef);
                return(table.TryGetRow((int)(row.Column1 - 1), out var typeRow)
                    ? (TypeDefinition)table.GetMemberFromRow(image, typeRow)
                    : null);
            });

            _interface = new LazyValue <ITypeDefOrRef>(() =>
            {
                var interfaceToken = tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(row.Column2);
                return(image.TryResolveMember(interfaceToken, out var member) ? (ITypeDefOrRef)member : null);
            });

            CustomAttributes = new CustomAttributeCollection(this);
        }
Example #12
0
        internal ExportedType(MetadataImage image, MetadataRow <TypeAttributes, uint, uint, uint, uint> row)
            : base(row.MetadataToken)
        {
            _image     = image;
            Attributes = row.Column1;
            TypeDefId  = row.Column2;

            _name = new LazyValue <string>(()
                                           => image.Header.GetStream <StringStream>().GetStringByOffset(row.Column3));

            _namespace = new LazyValue <string>(()
                                                => image.Header.GetStream <StringStream>().GetStringByOffset(row.Column4));

            _implementation = new LazyValue <IImplementation>(() =>
            {
                var encoder             = image.Header.GetStream <TableStream>().GetIndexEncoder(CodedIndex.Implementation);
                var implementationToken = encoder.DecodeIndex(row.Column5);
                IMetadataMember member;
                return(image.TryResolveMember(implementationToken, out member)
                    ? (IImplementation)member
                    : null);
            });
        }
Example #13
0
        internal TypeDefinition(MetadataImage image, MetadataRow <TypeAttributes, uint, uint, uint, uint, uint> row)
            : base(row.MetadataToken)
        {
            Module = image.Assembly.Modules.FirstOrDefault();
            var tableStream  = image.Header.GetStream <TableStream>();
            var stringStream = image.Header.GetStream <StringStream>();

            Attributes = row.Column1;

            _name      = _namespace = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column2));
            _namespace = new LazyValue <string>(() => stringStream.GetStringByOffset(row.Column3));
            _baseType  = new LazyValue <ITypeDefOrRef>(() =>
            {
                var baseTypeToken = tableStream.GetIndexEncoder(CodedIndex.TypeDefOrRef).DecodeIndex(row.Column4);
                if (baseTypeToken.Rid != 0)
                {
                    IMetadataMember baseType;
                    if (image.TryResolveMember(baseTypeToken, out baseType))
                    {
                        return(baseType as ITypeDefOrRef);
                    }
                }
                return(null);
            });

            Fields  = new RangedMemberCollection <TypeDefinition, FieldDefinition>(this, MetadataTokenType.Field, 4, GetFieldOwner, SetFieldOwner);
            Methods = new RangedMemberCollection <TypeDefinition, MethodDefinition>(this, MetadataTokenType.Method, 5, GetMethodOwner, SetMethodOwner);

            _classLayout = new LazyValue <ClassLayout>(() =>
            {
                var table     = image.Header.GetStream <TableStream>().GetTable(MetadataTokenType.ClassLayout);
                var layoutRow = table.GetRowByKey(2, row.MetadataToken.Rid);
                return(layoutRow != null ? (ClassLayout)table.GetMemberFromRow(image, layoutRow) : null);
            });

            _propertyMap = new LazyValue <PropertyMap>(() =>
            {
                var table  = image.Header.GetStream <TableStream>().GetTable(MetadataTokenType.PropertyMap);
                var mapRow = table.GetRowByKey(0, row.MetadataToken.Rid);
                return(mapRow != null ? (PropertyMap)table.GetMemberFromRow(image, mapRow) : null);
            });

            _eventMap = new LazyValue <EventMap>(() =>
            {
                var table  = image.Header.GetStream <TableStream>().GetTable(MetadataTokenType.EventMap);
                var mapRow = table.GetRowByKey(0, row.MetadataToken.Rid);
                return(mapRow != null ? (EventMap)table.GetMemberFromRow(image, mapRow) : null);
            });

            _declaringType = new LazyValue <TypeDefinition>(() =>
            {
                var table          = image.Header.GetStream <TableStream>().GetTable(MetadataTokenType.NestedClass);
                var nestedClassRow = table.GetRowByKey(0, row.MetadataToken.Rid);
                return(nestedClassRow != null
                    ? ((NestedClass)table.GetMemberFromRow(image, nestedClassRow)).EnclosingClass
                    : null);
            });

            CustomAttributes      = new CustomAttributeCollection(this);
            SecurityDeclarations  = new SecurityDeclarationCollection(this);
            NestedClasses         = new NestedClassCollection(this);
            GenericParameters     = new GenericParameterCollection(this);
            Interfaces            = new InterfaceImplementationCollection(this);
            MethodImplementations = new MethodImplementationCollection(this);
        }