From f5f1522cfcf18607f8708788c67d55b7d0f8cfd3 Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Wed, 27 Jul 2011 02:13:43 +0200 Subject: [PATCH] InsertParenthesesVisitor: insert parenthesis in "(new int[1])[0]" --- .../CSharp/InsertParenthesesVisitorTests.cs | 33 +++++++++++++++++++ .../OutputVisitor/InsertParenthesesVisitor.cs | 5 +++ 2 files changed, 38 insertions(+) diff --git a/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs b/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs index b7f6328f3..c1cca008e 100644 --- a/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs +++ b/NRefactory/ICSharpCode.NRefactory.Tests/CSharp/InsertParenthesesVisitorTests.cs @@ -345,5 +345,38 @@ namespace ICSharpCode.NRefactory.CSharp Assert.AreEqual("a && (b || c)", InsertRequired(expr)); Assert.AreEqual("a && (b || c)", InsertReadable(expr)); } + + [Test] + public void ArrayCreationInIndexer() + { + Expression expr = new IndexerExpression { + Target = new ArrayCreateExpression { + Type = new PrimitiveType("int"), + Arguments = { new PrimitiveExpression(1) } + }, + Arguments = { new PrimitiveExpression(0) } + }; + + Assert.AreEqual("(new int[1]) [0]", InsertRequired(expr)); + Assert.AreEqual("(new int[1]) [0]", InsertReadable(expr)); + } + + [Test] + public void ArrayCreationWithInitializerInIndexer() + { + Expression expr = new IndexerExpression { + Target = new ArrayCreateExpression { + Type = new PrimitiveType("int"), + Arguments = { new PrimitiveExpression(1) }, + Initializer = new ArrayInitializerExpression { + Elements = { new PrimitiveExpression(42) } + } + }, + Arguments = { new PrimitiveExpression(0) } + }; + + Assert.AreEqual("new int[1] { 42 } [0]", InsertRequired(expr)); + Assert.AreEqual("(new int[1] { 42 }) [0]", InsertReadable(expr)); + } } } diff --git a/NRefactory/ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs b/NRefactory/ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs index 8e2e5981b..dab89495b 100644 --- a/NRefactory/ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs +++ b/NRefactory/ICSharpCode.NRefactory/CSharp/OutputVisitor/InsertParenthesesVisitor.cs @@ -132,6 +132,11 @@ namespace ICSharpCode.NRefactory.CSharp public override object VisitIndexerExpression(IndexerExpression indexerExpression, object data) { ParenthesizeIfRequired(indexerExpression.Target, Primary); + ArrayCreateExpression ace = indexerExpression.Target as ArrayCreateExpression; + if (ace != null && (InsertParenthesesForReadability || ace.Initializer.IsNull)) { + // require parentheses for "(new int[1])[0]" + Parenthesize(indexerExpression.Target); + } return base.VisitIndexerExpression(indexerExpression, data); }