From d04400ad45894de1c3672566278c8f0c0cf5e7eb Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Mon, 23 Feb 2015 20:39:56 +0100 Subject: [PATCH] working on #540: use `EventDefinition` instead of `FieldDefinition` when referencing auto events in `TextOutputFormatter` --- ICSharpCode.Decompiler/Ast/AstBuilder.cs | 2 +- .../Ast/TextOutputFormatter.cs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler/Ast/AstBuilder.cs b/ICSharpCode.Decompiler/Ast/AstBuilder.cs index 11fb65fd0..30573a99f 100644 --- a/ICSharpCode.Decompiler/Ast/AstBuilder.cs +++ b/ICSharpCode.Decompiler/Ast/AstBuilder.cs @@ -160,7 +160,7 @@ namespace ICSharpCode.Decompiler.Ast RunTransformations(); syntaxTree.AcceptVisitor(new InsertParenthesesVisitor { InsertParenthesesForReadability = true }); - var outputFormatter = new TextOutputFormatter(output) { FoldBraces = context.Settings.FoldBraces }; + var outputFormatter = new TextOutputFormatter(output, context) { FoldBraces = context.Settings.FoldBraces }; var formattingPolicy = context.Settings.CSharpFormattingOptions; syntaxTree.AcceptVisitor(new CSharpOutputVisitor(outputFormatter, formattingPolicy)); } diff --git a/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs b/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs index 0f1889b48..2c4f56816 100644 --- a/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs +++ b/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs @@ -30,6 +30,7 @@ namespace ICSharpCode.Decompiler.Ast public class TextOutputFormatter : IOutputFormatter { readonly ITextOutput output; + readonly DecompilerContext context; readonly Stack nodeStack = new Stack(); int braceLevelWithinType = -1; bool inDocumentationComment = false; @@ -38,11 +39,14 @@ namespace ICSharpCode.Decompiler.Ast public bool FoldBraces = false; - public TextOutputFormatter(ITextOutput output) + public TextOutputFormatter(ITextOutput output, DecompilerContext context) { if (output == null) throw new ArgumentNullException("output"); + if (context == null) + throw new ArgumentNullException("context"); this.output = output; + this.context = context; } public void WriteIdentifier(string identifier) @@ -89,6 +93,19 @@ namespace ICSharpCode.Decompiler.Ast { memberRef = node.Parent.Annotation(); } + return FilterMemberReference(memberRef); + } + + MemberReference FilterMemberReference(MemberReference memberRef) + { + if (memberRef == null) + return null; + + if (context.Settings.AutomaticEvents && memberRef is FieldDefinition) { + var field = (FieldDefinition)memberRef; + return field.DeclaringType.Events.FirstOrDefault(ev => ev.Name == field.Name) ?? memberRef; + } + return memberRef; }