From 28179b821278a2e219bf745ff4a2ad8d94167677 Mon Sep 17 00:00:00 2001 From: Gen Lu Date: Tue, 8 Jan 2019 17:01:02 -0800 Subject: [PATCH] fix rename crash when an invalid for-loop control variable exist in VB syntax tree --- .../RenameEngineTests.VisualBasicConflicts.vb | 20 +++++++++++++++++++ .../Portable/Rename/LocalConflictVisitor.vb | 5 ++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/EditorFeatures/Test2/Rename/RenameEngineTests.VisualBasicConflicts.vb b/src/EditorFeatures/Test2/Rename/RenameEngineTests.VisualBasicConflicts.vb index 7387b2d515f..b8a21ff643b 100644 --- a/src/EditorFeatures/Test2/Rename/RenameEngineTests.VisualBasicConflicts.vb +++ b/src/EditorFeatures/Test2/Rename/RenameEngineTests.VisualBasicConflicts.vb @@ -3129,6 +3129,26 @@ End Class result.AssertLabeledSpansAre("current", type:=RelatedLocationType.NoConflict) End Using End Sub + + + + + Public Sub InvalidControlVariableInForLoopDoNotCrash() + Using result = RenameEngineResult.Create(_outputHelper, + + + + + , renameTo:="v") + End Using + End Sub End Class End Class End Namespace diff --git a/src/Workspaces/VisualBasic/Portable/Rename/LocalConflictVisitor.vb b/src/Workspaces/VisualBasic/Portable/Rename/LocalConflictVisitor.vb index 22e823f34ba..ca3e969584b 100644 --- a/src/Workspaces/VisualBasic/Portable/Rename/LocalConflictVisitor.vb +++ b/src/Workspaces/VisualBasic/Portable/Rename/LocalConflictVisitor.vb @@ -145,8 +145,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Rename tokens.Add(DirectCast(controlVariable, VariableDeclaratorSyntax).Names.First().Identifier) Else Dim semanticModel = _newSolution.GetDocument(controlVariable.SyntaxTree).GetSemanticModelAsync(_cancellationToken).WaitAndGetResult_CanCallOnBackground(_cancellationToken) - Dim identifierToken = DirectCast(controlVariable, IdentifierNameSyntax).Identifier - Dim symbol = semanticModel.GetSymbolInfo(identifierToken).Symbol + Dim symbol = semanticModel.GetSymbolInfo(controlVariable).Symbol ' if it is a field we don't care If symbol IsNot Nothing AndAlso symbol.IsKind(SymbolKind.Local) Then @@ -155,7 +154,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Rename ' is this local declared in the for or for each loop? ' if not it was already added to the tracker before. If local.IsFor OrElse local.IsForEach Then - tokens.Add(identifierToken) + tokens.Add(DirectCast(controlVariable, IdentifierNameSyntax).Identifier) End If End If End If -- GitLab