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); }); }
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)); }
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); }); }
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); }
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); }
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); }
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); }); }
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); }
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); }); }
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); }