From 02fe3e32e502c09b192f3400470ea8cfedeb3095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Thu, 1 Sep 2011 09:59:09 +0200 Subject: [PATCH] Fixed array create expression tests. --- .../Expression/ArrayCreateExpressionTests.cs | 15 +++++++++++++-- .../CSharp/OutputVisitor/OutputVisitor.cs | 3 ++- .../CSharp/Parser/CSharpParser.cs | 6 +++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ArrayCreateExpressionTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ArrayCreateExpressionTests.cs index 2fb3c1ad7d..bb96d1e5b8 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ArrayCreateExpressionTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Parser/Expression/ArrayCreateExpressionTests.cs @@ -57,6 +57,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression "new int[] { 1 }", new ArrayCreateExpression { Type = new PrimitiveType("int"), + AdditionalArraySpecifiers = { + new ArraySpecifier(0) + }, Initializer = new ArrayInitializerExpression { Elements = { new PrimitiveExpression(1) } } @@ -70,7 +73,7 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression "new int[,] { { 1 } }", new ArrayCreateExpression { Type = new PrimitiveType("int"), - Arguments = { new EmptyExpression(), new EmptyExpression() }, // TODO: can we improve the AST for this? + AdditionalArraySpecifiers = { new ArraySpecifier (2) }, Initializer = new ArrayInitializerExpression { Elements = { new ArrayInitializerExpression { @@ -87,6 +90,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression ParseUtilCSharp.AssertExpression( "new[] { 1, 10, 100, 1000 }", new ArrayCreateExpression { + AdditionalArraySpecifiers = { + new ArraySpecifier(0) + }, Initializer = new ArrayInitializerExpression { Elements = { new PrimitiveExpression(1), @@ -103,7 +109,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression ParseUtilCSharp.AssertExpression( "new [,] { { 1, 10 }, { 100, 1000 } }", new ArrayCreateExpression { - Arguments = { new EmptyExpression(), new EmptyExpression() }, // TODO: can we improve the AST for this? + AdditionalArraySpecifiers = { + new ArraySpecifier(2), + }, Initializer = new ArrayInitializerExpression { Elements = { new ArrayInitializerExpression { @@ -128,6 +136,9 @@ namespace ICSharpCode.NRefactory.CSharp.Parser.Expression ParseUtilCSharp.AssertExpression( "new [] { a = 10 }", new ArrayCreateExpression { + AdditionalArraySpecifiers = { + new ArraySpecifier(0) + }, Initializer = new ArrayInitializerExpression { Elements = { new AssignmentExpression(new IdentifierExpression("a"), new PrimitiveExpression(10)) diff --git a/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs b/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs index 62ad069cb8..cf5e9e2c84 100644 --- a/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs +++ b/ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs @@ -551,7 +551,8 @@ namespace ICSharpCode.NRefactory.CSharp StartNode (arrayCreateExpression); WriteKeyword ("new"); arrayCreateExpression.Type.AcceptVisitor (this, data); - WriteCommaSeparatedListInBrackets (arrayCreateExpression.Arguments); + if (arrayCreateExpression.Arguments.Count > 0) + WriteCommaSeparatedListInBrackets (arrayCreateExpression.Arguments); foreach (var specifier in arrayCreateExpression.AdditionalArraySpecifiers) specifier.AcceptVisitor (this, data); arrayCreateExpression.Initializer.AcceptVisitor (this, data); diff --git a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs index c0247bb75a..f2a485e344 100644 --- a/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs +++ b/ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs @@ -2432,7 +2432,11 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (ConvertToType (arrayCreationExpression.NewType), ArrayCreateExpression.Roles.Type); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), 1), ArrayCreateExpression.Roles.LBracket); + + var next = arrayCreationExpression.Rank; if (arrayCreationExpression.Arguments != null) { + // skip first array rank. + next = next.Next; var commaLocations = LocationsBag.GetLocations (arrayCreationExpression.Arguments); for (int i = 0 ;i < arrayCreationExpression.Arguments.Count; i++) { result.AddChild ((Expression)arrayCreationExpression.Arguments[i].Accept (this), ArrayCreateExpression.Roles.Argument); @@ -2440,7 +2444,7 @@ namespace ICSharpCode.NRefactory.CSharp result.AddChild (new CSharpTokenNode (Convert (commaLocations [commaLocations.Count - i]), 1), ArrayCreateExpression.Roles.Comma); } } - var next = arrayCreationExpression.Rank.Next; + while (next != null) { ArraySpecifier spec = new ArraySpecifier (next.Dimension); var loc = LocationsBag.GetLocations (next);