public TypeDefinitionNode(CilTypeDefinition typeDef) { _typeDefinition = typeDef; _children.AddRange(typeDef.FieldDefinitions.Select(cf => new FieldNode(cf))); _children.AddRange(typeDef.Properties.Select(cp => new PropertyNode(cp))); _children.AddRange( typeDef.MethodDefinitions .Where(cmd => !cmd.Name.StartsWith("get_") && !cmd.Name.StartsWith("set_")) .Select(cmd => new MethodNode(cmd))); }
internal static CilEntity DecodeEntityHandle(EntityHandle handle, ref CilReaders readers) { if (handle.Kind == HandleKind.TypeDefinition) { TypeDefinition definition = readers.MdReader.GetTypeDefinition((TypeDefinitionHandle)handle); int token = MetadataTokens.GetToken(handle); CilTypeDefinition type = CilTypeDefinition.Create(definition, ref readers, token); return(new CilEntity(type, EntityKind.TypeDefinition)); } if (handle.Kind == HandleKind.TypeSpecification) { TypeSpecification specification = readers.MdReader.GetTypeSpecification((TypeSpecificationHandle)handle); CilTypeSpecification type = CilTypeSpecification.Create(specification, ref readers); return(new CilEntity(type, EntityKind.TypeSpecification)); } if (handle.Kind == HandleKind.TypeReference) { TypeReference reference = readers.MdReader.GetTypeReference((TypeReferenceHandle)handle); int token = MetadataTokens.GetToken(handle); CilTypeReference type = CilTypeReference.Create(reference, ref readers, token); return(new CilEntity(type, EntityKind.TypeReference)); } throw new BadImageFormatException("Event definition type must be either type reference, type definition or type specification"); }
public void Visit(CilTypeDefinition typeDefinition) { WriteIndentation(); _writer.Write(".class "); if (_options.ShowBytes) { _writer.Write("/* {0:X8} */ ", typeDefinition.Token); } if (typeDefinition.IsNested) { _writer.Write(typeDefinition.Name); } else { _writer.Write(typeDefinition.FullName); } if (typeDefinition.HasBaseType) { _writer.Write(" extends "); WriteEntityType(typeDefinition.BaseType); } _writer.WriteLine(); WriteIndentation(); _writer.WriteLine('{'); Indent(); if (!typeDefinition.Layout.IsDefault) { WriteIndentation(); _writer.WriteLine(string.Format(".pack {0}", typeDefinition.Layout.PackingSize)); WriteIndentation(); _writer.WriteLine(string.Format(".size {0}", typeDefinition.Layout.Size)); } foreach (var attribute in typeDefinition.CustomAttributes) { attribute.Accept(this); } foreach (var nestedType in typeDefinition.NestedTypes) { nestedType.Accept(this); } foreach (var field in typeDefinition.FieldDefinitions) { field.Accept(this); } foreach (var method in typeDefinition.MethodDefinitions) { method.Accept(this); } foreach (var eventDef in typeDefinition.Events) { eventDef.Accept(this); } foreach (var property in typeDefinition.Properties) { property.Accept(this); } Unindent(); WriteIndentation(); _writer.Write('}'); _writer.WriteLine(string.Format(" // end of class {0}", typeDefinition.FullName)); _writer.WriteLine(); }
public void Visit(CilTypeDefinition typeDefinition) { WriteIndentation(); _writer.Write(".class "); if (_options.ShowBytes) _writer.Write("/* {0:X8} */ ", typeDefinition.Token); if (typeDefinition.IsNested) { _writer.Write(typeDefinition.Name); } else { _writer.Write(typeDefinition.FullName); } if (typeDefinition.HasBaseType) { _writer.Write(" extends "); WriteEntityType(typeDefinition.BaseType); } _writer.WriteLine(); WriteIndentation(); _writer.WriteLine('{'); Indent(); if (!typeDefinition.Layout.IsDefault) { WriteIndentation(); _writer.WriteLine(string.Format(".pack {0}", typeDefinition.Layout.PackingSize)); WriteIndentation(); _writer.WriteLine(string.Format(".size {0}", typeDefinition.Layout.Size)); } foreach (var attribute in typeDefinition.CustomAttributes) { attribute.Accept(this); } foreach (var nestedType in typeDefinition.NestedTypes) { nestedType.Accept(this); } foreach(var field in typeDefinition.FieldDefinitions) { field.Accept(this); } foreach (var method in typeDefinition.MethodDefinitions) { method.Accept(this); } foreach(var eventDef in typeDefinition.Events) { eventDef.Accept(this); } foreach (var property in typeDefinition.Properties) { property.Accept(this); } Unindent(); WriteIndentation(); _writer.Write('}'); _writer.WriteLine(string.Format(" // end of class {0}", typeDefinition.FullName)); _writer.WriteLine(); }