From b4e8386611fb1ae430864a67513cb20ea8fc595c Mon Sep 17 00:00:00 2001 From: Ronny Klier Date: Fri, 5 Apr 2013 11:53:56 +0200 Subject: [PATCH 1/2] Fix #220: Link constructor calls to constructor rather than type + add link for base constructor calls --- ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs b/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs index c43b0c7c2..cbc61870d 100644 --- a/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs +++ b/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs @@ -84,7 +84,9 @@ namespace ICSharpCode.Decompiler.Ast { AstNode node = nodeStack.Peek(); MemberReference memberRef = node.Annotation(); - if (memberRef == null && node.Role == Roles.TargetExpression && (node.Parent is InvocationExpression || node.Parent is ObjectCreateExpression)) { + if ((node.Parent is ObjectCreateExpression) || + (memberRef == null && node.Role == Roles.TargetExpression && node.Parent is InvocationExpression)) + { memberRef = node.Parent.Annotation(); } return memberRef; @@ -160,7 +162,12 @@ namespace ICSharpCode.Decompiler.Ast public void WriteKeyword(string keyword) { - output.Write(keyword); + MemberReference memberRef = GetCurrentMemberReference(); + var node = nodeStack.Peek(); + if (memberRef != null && node is ConstructorInitializer) + output.WriteReference(keyword, memberRef); + else + output.Write(keyword); } public void WriteToken(string token) From 25f35033ac24c1a6d66b1bc9ac2bc09c35eed952 Mon Sep 17 00:00:00 2001 From: Ronny Klier Date: Tue, 9 Apr 2013 13:45:17 +0200 Subject: [PATCH 2/2] Fix: Do not link arguments to constructor --- ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs b/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs index cbc61870d..0f1889b48 100644 --- a/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs +++ b/ICSharpCode.Decompiler/Ast/TextOutputFormatter.cs @@ -84,8 +84,8 @@ namespace ICSharpCode.Decompiler.Ast { AstNode node = nodeStack.Peek(); MemberReference memberRef = node.Annotation(); - if ((node.Parent is ObjectCreateExpression) || - (memberRef == null && node.Role == Roles.TargetExpression && node.Parent is InvocationExpression)) + if ((node.Role == Roles.Type && node.Parent is ObjectCreateExpression) || + (memberRef == null && node.Role == Roles.TargetExpression && (node.Parent is InvocationExpression || node.Parent is ObjectCreateExpression))) { memberRef = node.Parent.Annotation(); }