Beispiel #1
0
 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)));
 }
Beispiel #2
0
 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();
        }