Skip to content

NullReferenceException in CSharpCodeGenerationService.AddStatementsWorker() with top-level statements #44387

@cston

Description

@cston
  1. Run devenv.exe with commit 9be1ef7.
  2. Create Console Application
  3. Replace Program.cs contents with:
using System;
using System.Linq.Expressions;

char x = '0';
Expression<Func<char, bool>> e = (Func<char, bool>)(c => c == x);
  1. Highlight Func<char, bool>)(

Program

NullReferenceException: `options` is `null`:

>	Microsoft.CodeAnalysis.CSharp.Workspaces.dll!Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpCodeGenerationService.AddStatementsWorker<Microsoft.CodeAnalysis.SyntaxNode>(Microsoft.CodeAnalysis.SyntaxNode destinationMember, System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.SyntaxNode> statements, Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptions options, System.Threading.CancellationToken cancellationToken) Line 497	C#
 	Microsoft.CodeAnalysis.CSharp.Workspaces.dll!Microsoft.CodeAnalysis.CSharp.CodeGeneration.CSharpCodeGenerationService.AddStatements<Microsoft.CodeAnalysis.SyntaxNode>(Microsoft.CodeAnalysis.SyntaxNode destinationMember, System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.SyntaxNode> statements, Microsoft.CodeAnalysis.CodeGeneration.CodeGenerationOptions options, System.Threading.CancellationToken cancellationToken) Line 487	C#
 	Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.ExtractMethod.MethodExtractor.CodeGenerator<Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax, Microsoft.CodeAnalysis.CSharp.Syntax.ExpressionSyntax, Microsoft.CodeAnalysis.SyntaxNode>.GenerateAsync(System.Threading.CancellationToken cancellationToken) Line 100	C#
 	Microsoft.CodeAnalysis.CSharp.Features.dll!Microsoft.CodeAnalysis.CSharp.ExtractMethod.CSharpMethodExtractor.CSharpCodeGenerator.GenerateAsync(Microsoft.CodeAnalysis.ExtractMethod.InsertionPoint insertionPoint, Microsoft.CodeAnalysis.ExtractMethod.SelectionResult selectionResult, Microsoft.CodeAnalysis.ExtractMethod.MethodExtractor.AnalyzerResult analyzerResult, Microsoft.CodeAnalysis.Options.OptionSet options, bool localFunction, System.Threading.CancellationToken cancellationToken) Line 48	C#
 	Microsoft.CodeAnalysis.CSharp.Features.dll!Microsoft.CodeAnalysis.CSharp.ExtractMethod.CSharpMethodExtractor.GenerateCodeAsync(Microsoft.CodeAnalysis.ExtractMethod.InsertionPoint insertionPoint, Microsoft.CodeAnalysis.ExtractMethod.SelectionResult selectionResult, Microsoft.CodeAnalysis.ExtractMethod.MethodExtractor.AnalyzerResult analyzeResult, Microsoft.CodeAnalysis.Options.OptionSet options, System.Threading.CancellationToken cancellationToken) Line 94	C#
 	Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.ExtractMethod.MethodExtractor.ExtractMethodAsync(System.Threading.CancellationToken cancellationToken) Line 65	C#
 	Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.ExtractMethod.AbstractExtractMethodService<Microsoft.CodeAnalysis.CSharp.ExtractMethod.CSharpSelectionValidator, Microsoft.CodeAnalysis.CSharp.ExtractMethod.CSharpMethodExtractor, Microsoft.CodeAnalysis.CSharp.ExtractMethod.CSharpSelectionResult>.ExtractMethodAsync(Microsoft.CodeAnalysis.Document document, Microsoft.CodeAnalysis.Text.TextSpan textSpan, bool localFunction, Microsoft.CodeAnalysis.Options.OptionSet options, System.Threading.CancellationToken cancellationToken) Line 44	C#
 	Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.ExtractMethod.ExtractMethodService.ExtractMethodAsync(Microsoft.CodeAnalysis.Document document, Microsoft.CodeAnalysis.Text.TextSpan textSpan, bool localFunction, Microsoft.CodeAnalysis.Options.OptionSet options, System.Threading.CancellationToken cancellationToken) Line 16	C#
 	Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.CodeRefactorings.ExtractMethod.ExtractMethodCodeRefactoringProvider.ExtractLocalFunctionAsync(Microsoft.CodeAnalysis.Document document, Microsoft.CodeAnalysis.Text.TextSpan textSpan, System.Threading.CancellationToken cancellationToken) Line 102	C#
 	Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.CodeRefactorings.ExtractMethod.ExtractMethodCodeRefactoringProvider.GetCodeActionsAsync(Microsoft.CodeAnalysis.Document document, Microsoft.CodeAnalysis.Text.TextSpan textSpan, System.Threading.CancellationToken cancellationToken) Line 70	C#
 	[Resuming Async Method]	

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions