Browse Source

working on #540: use `EventDefinition` instead of `FieldDefinition` when referencing auto events in `TextOutputFormatter`

pull/488/merge
Siegfried Pammer 11 years ago
parent
commit
d04400ad45
  1. 2
      ICSharpCode.Decompiler/Ast/AstBuilder.cs
  2. 19
      ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs

2
ICSharpCode.Decompiler/Ast/AstBuilder.cs

@ -160,7 +160,7 @@ namespace ICSharpCode.Decompiler.Ast
RunTransformations(); RunTransformations();
syntaxTree.AcceptVisitor(new InsertParenthesesVisitor { InsertParenthesesForReadability = true }); 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; var formattingPolicy = context.Settings.CSharpFormattingOptions;
syntaxTree.AcceptVisitor(new CSharpOutputVisitor(outputFormatter, formattingPolicy)); syntaxTree.AcceptVisitor(new CSharpOutputVisitor(outputFormatter, formattingPolicy));
} }

19
ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs

@ -30,6 +30,7 @@ namespace ICSharpCode.Decompiler.Ast
public class TextOutputFormatter : IOutputFormatter public class TextOutputFormatter : IOutputFormatter
{ {
readonly ITextOutput output; readonly ITextOutput output;
readonly DecompilerContext context;
readonly Stack<AstNode> nodeStack = new Stack<AstNode>(); readonly Stack<AstNode> nodeStack = new Stack<AstNode>();
int braceLevelWithinType = -1; int braceLevelWithinType = -1;
bool inDocumentationComment = false; bool inDocumentationComment = false;
@ -38,11 +39,14 @@ namespace ICSharpCode.Decompiler.Ast
public bool FoldBraces = false; public bool FoldBraces = false;
public TextOutputFormatter(ITextOutput output) public TextOutputFormatter(ITextOutput output, DecompilerContext context)
{ {
if (output == null) if (output == null)
throw new ArgumentNullException("output"); throw new ArgumentNullException("output");
if (context == null)
throw new ArgumentNullException("context");
this.output = output; this.output = output;
this.context = context;
} }
public void WriteIdentifier(string identifier) public void WriteIdentifier(string identifier)
@ -89,6 +93,19 @@ namespace ICSharpCode.Decompiler.Ast
{ {
memberRef = node.Parent.Annotation<MemberReference>(); memberRef = node.Parent.Annotation<MemberReference>();
} }
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; return memberRef;
} }

Loading…
Cancel
Save