Skip to content

Commit 5300b74

Browse files
Use correct initializer type
1 parent 18e8c90 commit 5300b74

4 files changed

Lines changed: 17 additions & 19 deletions

File tree

CodeConverter/CSharp/ExpressionNodeVisitor.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,10 @@ public override async Task<CSharpSyntaxNode> VisitCollectionInitializer(VBasic.S
558558
var isExplicitCollectionInitializer = node.Parent is VBasic.Syntax.ObjectCollectionInitializerSyntax
559559
|| node.Parent is VBasic.Syntax.CollectionInitializerSyntax
560560
|| node.Parent is VBasic.Syntax.ArrayCreationExpressionSyntax;
561-
var initializerKind = isExplicitCollectionInitializer ? SyntaxKind.CollectionInitializerExpression : SyntaxKind.ArrayInitializerExpression;
561+
var initializerKind = node.IsParentKind(VBasic.SyntaxKind.ObjectCollectionInitializer) || node.IsParentKind(VBasic.SyntaxKind.ObjectCreationExpression) ?
562+
SyntaxKind.CollectionInitializerExpression :
563+
node.IsParentKind(VBasic.SyntaxKind.CollectionInitializer) && IsComplexInitializer(node) ? SyntaxKind.ComplexElementInitializerExpression :
564+
SyntaxKind.ArrayInitializerExpression;
562565
var initializers = (await node.Initializers.SelectAsync(i => i.AcceptAsync(TriviaConvertingExpressionVisitor))).Cast<ExpressionSyntax>();
563566
var initializer = SyntaxFactory.InitializerExpression(initializerKind, SyntaxFactory.SeparatedList(initializers));
564567
if (isExplicitCollectionInitializer) return initializer;
@@ -576,6 +579,12 @@ public override async Task<CSharpSyntaxNode> VisitCollectionInitializer(VBasic.S
576579
return SyntaxFactory.ImplicitArrayCreationExpression(SyntaxFactory.TokenList(commas), initializer);
577580
}
578581

582+
private bool IsComplexInitializer(VBSyntax.CollectionInitializerSyntax node)
583+
{
584+
return _semanticModel.GetOperation(node.Parent.Parent) is IObjectOrCollectionInitializerOperation initializer &&
585+
initializer.Initializers.OfType<IInvocationOperation>().Any();
586+
}
587+
579588
public override async Task<CSharpSyntaxNode> VisitQueryExpression(VBasic.Syntax.QueryExpressionSyntax node)
580589
{
581590
return await _queryConverter.ConvertClausesAsync(node.Clauses);

Tests/CSharp/ExpressionTests/AccessExpressionTests.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,7 @@ public void Test()
7474
var dict = new Dictionary<string, string>() { { ""a"", ""AAA"" }, { ""b"", ""bbb"" } };
7575
string v = dict?[""a""];
7676
}
77-
}
78-
1 target compilation errors:
79-
CS7036: There is no argument given that corresponds to the required formal parameter 'value' of 'Dictionary<string, string>.Add(string, string)'");
77+
}");
8078
}
8179

8280
[Fact]

Tests/CSharp/ExpressionTests/ExpressionTests.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,7 @@ private void TestMethod(string str)
923923
}
924924
}");
925925
}
926+
926927
[Fact]
927928
public async Task CollectionInitializersAsync()
928929
{
@@ -948,9 +949,7 @@ private void TestMethod()
948949
var intList = new List<int>() { 1 };
949950
var dict = new Dictionary<int, int>() { { 1, 2 }, { 3, 4 } };
950951
}
951-
}
952-
1 target compilation errors:
953-
CS7036: There is no argument given that corresponds to the required formal parameter 'value' of 'Dictionary<int, int>.Add(int, int)'");
952+
}");
954953
}
955954

956955
[Fact]

Tests/CSharp/StatementTests/StatementTests.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -934,9 +934,7 @@ private void TestMethod()
934934
// Declare a jagged array
935935
var sales = new double[12][];
936936
}
937-
}
938-
1 target compilation errors:
939-
CS8751: Internal error in the C# compiler.");
937+
}");
940938
}
941939

942940
[Fact]
@@ -970,9 +968,7 @@ private void TestMethod()
970968
{
971969
var b = new[,] { { 1, 2 }, { 3, 4 } };
972970
}
973-
}
974-
1 target compilation errors:
975-
CS8751: Internal error in the C# compiler.");
971+
}");
976972
}
977973

978974
[Fact]
@@ -989,9 +985,7 @@ private void TestMethod()
989985
{
990986
var b = new int[,] { { 1, 2 }, { 3, 4 } };
991987
}
992-
}
993-
1 target compilation errors:
994-
CS8751: Internal error in the C# compiler.");
988+
}");
995989
}
996990

997991
[Fact]
@@ -1020,9 +1014,7 @@ private void TestMethod()
10201014
var f = new int[0][,];
10211015
var g = new int[1][,];
10221016
}
1023-
}
1024-
1 target compilation errors:
1025-
CS8751: Internal error in the C# compiler.");
1017+
}");
10261018
}
10271019

10281020
[Fact]

0 commit comments

Comments
 (0)