private void LoadInterfaceImplMetadata() { if (!_stream.Tables.ContainsKey(MetadataTables.InterfaceImpl)) { return; } MetadataRow[] interfaceImplementations = _stream.Tables[MetadataTables.InterfaceImpl]; for (int i = 0; i < interfaceImplementations.Length; i++) { InterfaceImplMetadataTableRow interfaceImplRow = interfaceImplementations[i] as InterfaceImplMetadataTableRow; TypeDefMetadataTableRow implementingClassRow = _stream.Tables.GetEntryFor( MetadataTables.TypeDef, interfaceImplRow.Class ) as TypeDefMetadataTableRow; MetadataRow interfaceRow = _stream.Tables.GetEntryFor( interfaceImplRow.Interface.Table, interfaceImplRow.Interface.Index); TypeDef implementingClass = _map.GetDefinition(MetadataTables.TypeDef, implementingClassRow) as TypeDef; TypeRef implementedClass = _map.GetDefinition(interfaceImplRow.Interface.Table, interfaceRow) as TypeRef; if (implementedClass is TypeSpec) { ((TypeSpec)implementedClass).ImplementingType = implementingClass; } implementingClass.Implements.Add(_map.GetDefinition(interfaceImplRow.Interface.Table, interfaceRow) as TypeRef); } }
public void InterfaceImpl_WhenCreated_OffsetIsMovedOn() { byte[] contents = new byte[10]; IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2); ICodedIndexResolver resolver = IndexHelper.CreateCodedIndexResolver(2); Offset offset = 0; InterfaceImplMetadataTableRow row = new InterfaceImplMetadataTableRow(contents, offset, resolver, indexDetails); Assert.AreEqual(4, offset.Current); }
public void InterfaceImpl_WhenCreated_FieldsAreReadCorrectly() { byte[] contents = new byte[] { 0x01, 0x00, 0x00, 0x00 }; ICodedIndexResolver resolver = IndexHelper.CreateCodedIndexResolver(2); IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2); InterfaceImplMetadataTableRow row = new InterfaceImplMetadataTableRow(contents, 0, resolver, indexDetails); Assert.AreEqual(1, row.Class.Value); Assert.IsNotNull(row.Interface); }
public InerfaceImplEntry(MetadataDirectory directory, InterfaceImplMetadataTableRow row) { this.FileOffset = string.Format("0x{0:x}", row.FileOffset); this.Class = row.Class.ToString(); this.Interface = row.Interface.ToString(); }