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);
        }
Example #4
0
 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();
 }