@@ -82,7 +82,6 @@ protected CodeGenerator(
8282 protected abstract IMethodSymbol GenerateMethodDefinition ( SyntaxNode insertionPointNode , CancellationToken cancellationToken ) ;
8383 protected abstract bool ShouldLocalFunctionCaptureParameter ( SyntaxNode node ) ;
8484
85- protected abstract SyntaxToken CreateIdentifier ( string name ) ;
8685 protected abstract SyntaxToken CreateMethodName ( ) ;
8786 protected abstract bool LastStatementOrHasReturnStatementInReturnableConstruct ( ) ;
8887
@@ -93,7 +92,6 @@ protected CodeGenerator(
9392 protected abstract TExpressionSyntax CreateCallSignature ( ) ;
9493 protected abstract TStatementSyntax CreateDeclarationStatement ( ImmutableArray < VariableInfo > variables , TExpressionSyntax initialValue , CancellationToken cancellationToken ) ;
9594 protected abstract TStatementSyntax CreateAssignmentExpressionStatement ( ImmutableArray < VariableInfo > variables , TExpressionSyntax rvalue ) ;
96- protected abstract TStatementSyntax CreateReturnStatement ( params string [ ] identifierNames ) ;
9795
9896 protected abstract ImmutableArray < TStatementSyntax > GetInitialStatementsForMethodDefinitions ( ) ;
9997
@@ -223,7 +221,22 @@ protected ImmutableArray<TStatementSyntax> AddReturnIfUnreachable(
223221 if ( LastStatementOrHasReturnStatementInReturnableConstruct ( ) )
224222 return statements ;
225223
226- return statements . Concat ( CreateReturnStatement ( ) ) ;
224+ return statements . Concat ( CreateReturnStatement ( [ ] ) ) ;
225+ }
226+
227+ private TExecutableStatementSyntax CreateReturnStatement ( ImmutableArray < TExpressionSyntax > expressions )
228+ {
229+ var generator = this . SemanticDocument . GetRequiredLanguageService < SyntaxGenerator > ( ) ;
230+ return ( TExecutableStatementSyntax ) generator . ReturnStatement ( CreateReturnExpression ( expressions ) ) ;
231+ }
232+
233+ private TExpressionSyntax CreateReturnExpression ( ImmutableArray < TExpressionSyntax > expressions )
234+ {
235+ var generator = this . SemanticDocument . GetRequiredLanguageService < SyntaxGenerator > ( ) ;
236+ return
237+ expressions . Length == 0 ? null :
238+ expressions . Length == 1 ? expressions [ 0 ] :
239+ ( TExpressionSyntax ) generator . TupleExpression ( expressions . Select ( generator . Argument ) ) ;
227240 }
228241
229242 protected async Task < ImmutableArray < TStatementSyntax > > AddInvocationAtCallSiteAsync (
@@ -288,7 +301,11 @@ protected ImmutableArray<TStatementSyntax> AppendReturnStatementIfNeeded(Immutab
288301 if ( AnalyzerResult . VariablesToUseAsReturnValue . IsEmpty )
289302 return statements ;
290303
291- return statements . Concat ( CreateReturnStatement ( [ .. AnalyzerResult . VariablesToUseAsReturnValue . Select ( b => b . Name ) ] ) ) ;
304+ var generator = this . SemanticDocument . GetRequiredLanguageService < SyntaxGenerator > ( ) ;
305+ return statements . Concat ( CreateReturnStatement (
306+ AnalyzerResult . VariablesToUseAsReturnValue . SelectAsArray (
307+ static ( v , generator ) => ( TExpressionSyntax ) generator . IdentifierName ( v . Name ) ,
308+ generator ) ) ) ;
292309 }
293310
294311 protected static HashSet < SyntaxAnnotation > CreateVariableDeclarationToRemoveMap (
0 commit comments