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