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; }
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)); } }
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; } } } }
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)); }