private void LoadNestedClassMetadata() { if (!_stream.Tables.ContainsKey(MetadataTables.NestedClass)) { return; } MetadataRow[] nestedClasses = _stream.Tables[MetadataTables.NestedClass]; for (int i = 0; i < nestedClasses.Length; i++) { NestedClassMetadataTableRow nestedClassRow = nestedClasses[i] as NestedClassMetadataTableRow; TypeDefMetadataTableRow nestedClass = _stream.Tables.GetEntryFor( MetadataTables.TypeDef, nestedClassRow.NestedClass ) as TypeDefMetadataTableRow; TypeDef container = _map.GetDefinition(MetadataTables.TypeDef, _stream.Tables.GetEntryFor( MetadataTables.TypeDef, nestedClassRow.EnclosingClass )) as TypeDef; TypeDef nested = _map.GetDefinition(MetadataTables.TypeDef, nestedClass) as TypeDef; _assembly.Map.Remove(nested); // remove type originally added when loading typedef records nested.ContainingClass = container; _assembly.Map.Add(nested); } }
public void NestedClass_WhenCreated_OffsetIsMovedOn() { byte[] contents = new byte[4]; Offset offset = 0; IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2); NestedClassMetadataTableRow row = new NestedClassMetadataTableRow(contents, offset, indexDetails); Assert.AreEqual(4, offset.Current); }
public void NestedClass_WhenCreated_FieldsAreReadCorrectly() { byte[] contents = new byte[] { 0x01, 0x00, 0x02, 0x00 }; Offset offset = 0; IIndexDetails indexDetails = IndexHelper.CreateIndexDetails(2); NestedClassMetadataTableRow row = new NestedClassMetadataTableRow(contents, offset, indexDetails); Assert.AreEqual(1, row.NestedClass.Value); Assert.AreEqual(2, row.EnclosingClass.Value); }
public NestedClassEntry(MetadataDirectory directory, NestedClassMetadataTableRow row) { this.FileOffset = string.Format("0x{0:x}", row.FileOffset); this.EnclosingClass = row.EnclosingClass.ToString(); this.NestedClass = row.NestedClass.ToString(); }