diff --git a/src/ExpressiveSharp.Generator/Emitter/ExpressionTreeEmitter.cs b/src/ExpressiveSharp.Generator/Emitter/ExpressionTreeEmitter.cs index aea48924..421fed40 100644 --- a/src/ExpressiveSharp.Generator/Emitter/ExpressionTreeEmitter.cs +++ b/src/ExpressiveSharp.Generator/Emitter/ExpressionTreeEmitter.cs @@ -1228,8 +1228,9 @@ private string EmitObjectCreation(IObjectCreationOperation creation) } else { - var bindingsExpr = string.Join(", ", bindingVars); - AppendLine($"var {resultVar} = {Expr}.MemberInit({newVar}, {bindingsExpr});"); + AppendLine(bindingVars.Count == 0 + ? $"var {resultVar} = {Expr}.MemberInit({newVar});" + : $"var {resultVar} = {Expr}.MemberInit({newVar}, {string.Join(", ", bindingVars)});"); } } else @@ -1385,8 +1386,9 @@ private string EmitArrayCreation(IArrayCreationOperation arrayCreate) elementVars.Add(EmitOperation(element)); } - var elementsExpr = string.Join(", ", elementVars); - AppendLine($"var {resultVar} = {Expr}.NewArrayInit(typeof({elementTypeFqn}), {elementsExpr});"); + AppendLine(elementVars.Count == 0 + ? $"var {resultVar} = {Expr}.NewArrayInit(typeof({elementTypeFqn}));" + : $"var {resultVar} = {Expr}.NewArrayInit(typeof({elementTypeFqn}), {string.Join(", ", elementVars)});"); } else { @@ -1396,8 +1398,9 @@ private string EmitArrayCreation(IArrayCreationOperation arrayCreate) dimVars.Add(EmitOperation(dim)); } - var dimsExpr = string.Join(", ", dimVars); - AppendLine($"var {resultVar} = {Expr}.NewArrayBounds(typeof({elementTypeFqn}), {dimsExpr});"); + AppendLine(dimVars.Count == 0 + ? $"var {resultVar} = {Expr}.NewArrayBounds(typeof({elementTypeFqn}));" + : $"var {resultVar} = {Expr}.NewArrayBounds(typeof({elementTypeFqn}), {string.Join(", ", dimVars)});"); } return resultVar; diff --git a/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/CollectionExpressionTests.cs b/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/CollectionExpressionTests.cs index ffafe239..abe49374 100644 --- a/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/CollectionExpressionTests.cs +++ b/tests/ExpressiveSharp.Generator.Tests/ExpressiveGenerator/CollectionExpressionTests.cs @@ -155,4 +155,23 @@ class C { return Verifier.Verify(result.GeneratedTrees[0].ToString()); } + + [TestMethod] + public void EmptyArrayInitializer_GeneratedCodeCompiles() + { + var compilation = CreateCompilation( + """ + namespace Foo { + class C { + [Expressive] + public static int[] Empty() => new int[] { }; + } + } + """); + + var result = RunExpressiveGenerator(compilation); + + Assert.AreEqual(1, result.GeneratedTrees.Length); + Assert.IsFalse(result.Diagnostics.Any(d => d.Severity == Microsoft.CodeAnalysis.DiagnosticSeverity.Error)); + } }