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