コード例 #1
0
 public BuilderState(DecompilationContext ctx, BuilderCache cache, MetadataTextColorProvider metadataTextColorProvider)
 {
     this.cache = cache;
     State      = cache.AllocateAstBuilderState();
     State.AstBuilder.Context.CalculateBinSpans         = ctx.CalculateBinSpans;
     State.AstBuilder.Context.MetadataTextColorProvider = metadataTextColorProvider;
 }
コード例 #2
0
ファイル: CSharpDecompiler.cs プロジェクト: pashav15/pashav
        protected override void FormatPropertyName(IDecompilerOutput output, PropertyDef property, bool?isIndexer)
        {
            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            if (!isIndexer.HasValue)
            {
                isIndexer = property.IsIndexer();
            }
            if (isIndexer.Value)
            {
                var accessor = property.GetMethod ?? property.SetMethod;
                if (accessor != null && accessor.HasOverrides)
                {
                    var methDecl      = accessor.Overrides.First().MethodDeclaration;
                    var declaringType = methDecl == null ? null : methDecl.DeclaringType;
                    TypeToString(output, declaringType, includeNamespace: true);
                    output.Write(".", BoxedTextColor.Operator);
                }
                output.Write("this", BoxedTextColor.Keyword);
                output.Write("[", BoxedTextColor.Punctuation);
                bool addSeparator = false;
                foreach (var p in property.PropertySig.GetParams())
                {
                    if (addSeparator)
                    {
                        output.Write(",", BoxedTextColor.Punctuation);
                        output.Write(" ", BoxedTextColor.Text);
                    }
                    else
                    {
                        addSeparator = true;
                    }
                    TypeToString(output, p.ToTypeDefOrRef(), includeNamespace: true);
                }
                output.Write("]", BoxedTextColor.Punctuation);
            }
            else
            {
                WriteIdentifier(output, property.Name, MetadataTextColorProvider.GetColor(property));
            }
        }
コード例 #3
0
        public override void Decompile(FieldDef field, IDecompilerOutput output, DecompilationContext ctx)
        {
            output.Write(IdentifierEscaper.Escape(field.FieldType.GetFullName()), field.FieldType.ToTypeDefOrRef(), DecompilerReferenceFlags.None, MetadataTextColorProvider.GetColor(field.FieldType));
            output.Write(" ", BoxedTextColor.Text);
            output.Write(IdentifierEscaper.Escape(field.Name), field, DecompilerReferenceFlags.Definition, MetadataTextColorProvider.GetColor(field));
            var c = field.Constant;

            if (c != null)
            {
                output.Write(" ", BoxedTextColor.Text);
                output.Write("=", BoxedTextColor.Operator);
                output.Write(" ", BoxedTextColor.Text);
                if (c.Value == null)
                {
                    output.Write("null", BoxedTextColor.Keyword);
                }
                else
                {
                    switch (c.Type)
                    {
                    case ElementType.Boolean:
                        if (c.Value is bool)
                        {
                            output.Write((bool)c.Value ? "true" : "false", BoxedTextColor.Keyword);
                        }
                        else
                        {
                            goto default;
                        }
                        break;

                    case ElementType.Char:
                        output.Write($"'{c.Value}'", BoxedTextColor.Char);
                        break;

                    case ElementType.I1:
                    case ElementType.U1:
                    case ElementType.I2:
                    case ElementType.U2:
                    case ElementType.I4:
                    case ElementType.U4:
                    case ElementType.I8:
                    case ElementType.U8:
                    case ElementType.R4:
                    case ElementType.R8:
                    case ElementType.I:
                    case ElementType.U:
                        output.Write($"{c.Value}", BoxedTextColor.Number);
                        break;

                    case ElementType.String:
                        output.Write($"{c.Value}", BoxedTextColor.String);
                        break;

                    default:
                        output.Write($"{c.Value}", BoxedTextColor.Text);
                        break;
                    }
                }
            }
        }
コード例 #4
0
        BraceInfo StartKeywordBlock(IDecompilerOutput output, string keyword, IMemberDef member)
        {
            output.Write(keyword, BoxedTextColor.Keyword);
            output.Write(" ", BoxedTextColor.Text);
            output.Write(IdentifierEscaper.Escape(member.Name), member, DecompilerReferenceFlags.Definition, MetadataTextColorProvider.GetColor(member));
            output.Write(" ", BoxedTextColor.Text);
            var start = output.NextPosition;

            output.Write("{", BoxedTextColor.Punctuation);
            output.WriteLine();
            output.IncreaseIndent();
            return(new BraceInfo(start));
        }