Version Used: VS 2022 17.4.0
Steps to Reproduce:
- Place the cursor at the marked location
- Insert
{.
- Press the Return key.
Note that the parentheses are balanced at the start.
namespace N;
internal class C
{
private void M()
{
M1(x => M2("a", y => M3<int>(z => $$)));
}
private void M1(Action<object> a) { }
private void M2(string a, Action<object> e) { }
private void M3<T>(Action<T> a) { }
}
Expected Behavior:
- The closing brace is placed at the correct location, forming an empty statement block:
M1(x => M2("a", y => M3(z => { })));
- The refactoring does not crash due to the malformed syntax.
Actual Behavior:
- The closing brace is placed between the second and third closing parenthesis, leading to malformed syntax:
M1(x => M2("a", y => M3(z => {))});
- After pressing Return the
ChangeSignatureCodeRefactoringProvider throws an exception, leading to a gold bar. The stack trace is posted below.
The second problem does not seem to occur when the namespace declaration is missing.
System.NullReferenceException : Object reference not set to an instance of an object.
at Microsoft.CodeAnalysis.ChangeSignature.AbstractChangeSignatureService.GetParameterIndexFromInvocationArgument(SyntaxNode argument,Document document,SemanticModel semanticModel,CancellationToken cancellationToken)
at async Microsoft.CodeAnalysis.CSharp.ChangeSignature.CSharpChangeSignatureService.GetInvocationSymbolAsync()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at async Microsoft.CodeAnalysis.ChangeSignature.AbstractChangeSignatureService.GetChangeSignatureContextAsync()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at async Microsoft.CodeAnalysis.ChangeSignature.AbstractChangeSignatureService.GetChangeSignatureCodeActionAsync()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at async Microsoft.CodeAnalysis.ChangeSignature.ChangeSignatureCodeRefactoringProvider.ComputeRefactoringsAsync()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at async Microsoft.CodeAnalysis.CodeRefactorings.CodeRefactoringService.GetRefactoringFromProviderAsync()
Version Used: VS 2022 17.4.0
Steps to Reproduce:
{.Note that the parentheses are balanced at the start.
Expected Behavior:
M1(x => M2("a", y => M3(z => { }))); Actual Behavior:
M1(x => M2("a", y => M3(z => {))}); ChangeSignatureCodeRefactoringProviderthrows an exception, leading to a gold bar. The stack trace is posted below.The second problem does not seem to occur when the namespace declaration is missing.