Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ExtractMethod in VB elseif blocks #76723

Merged
merged 1 commit into from
Jan 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,15 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ExtractMethod
WithStatements(VisitList(ReplaceStatementsIfNeeded(node.Statements)))
End Function

Public Overrides Function VisitElseIfBlock(node As ElseIfBlockSyntax) As SyntaxNode
If node IsNot Me.ContainerOfStatementsOrFieldToReplace Then
Return MyBase.VisitElseIfBlock(node)
End If

Return node.WithElseIfStatement(ReplaceStatementIfNeeded(node.ElseIfStatement)).
WithStatements(VisitList(ReplaceStatementsIfNeeded(node.Statements)))
End Function

Public Overrides Function VisitTryBlock(node As TryBlockSyntax) As SyntaxNode
If node IsNot Me.ContainerOfStatementsOrFieldToReplace Then
Return MyBase.VisitTryBlock(node)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Imports Microsoft.CodeAnalysis.Editor.UnitTests.CodeActions

Namespace Microsoft.CodeAnalysis.Editor.VisualBasic.UnitTests.CodeRefactorings.ExtractMethod
<Trait(Traits.Feature, Traits.Features.CodeActionsExtractMethod)>
Public Class ExtractMethodTests
Public NotInheritable Class ExtractMethodTests
Inherits AbstractVisualBasicCodeActionTest_NoEditor

Protected Overrides Function CreateCodeRefactoringProvider(workspace As TestWorkspace, parameters As TestParameters) As CodeRefactoringProvider
Expand Down Expand Up @@ -1181,5 +1181,79 @@ end class
{CodeStyleOptions2.QualifyMethodAccess, CodeStyleOption2.FalseWithSilentEnforcement}
})
End Function

<Fact, WorkItem("https://github.com/dotnet/roslyn/issues/20088")>
Public Async Function TestInElseIfBlock1() As Task
Await TestInRegularAndScriptAsync(
"Public Class Class1
Private Function Method(arg As Integer?) As Boolean
Dim something As Boolean
If arg.HasValue Then
something = True
ElseIf arg.Value < 50 Then
[|something = arg.Value > 15|]
Else
something = False
End If

Return something
End Function
End Class",
"Public Class Class1
Private Function Method(arg As Integer?) As Boolean
Dim something As Boolean
If arg.HasValue Then
something = True
ElseIf arg.Value < 50 Then
something = {|Rename:NewMethod|}(arg)
Else
something = False
End If

Return something
End Function

Private Shared Function NewMethod(arg As Integer?) As Boolean
Return arg.Value > 15
End Function
End Class")
End Function

<Fact, WorkItem("https://github.com/dotnet/roslyn/issues/20088")>
Public Async Function TestInElseIfBlock2() As Task
Await TestInRegularAndScriptAsync(
"Public Class Class1
Private Function Method(arg As Integer?) As Boolean
Dim something As Boolean
If arg.HasValue Then
something = True
ElseIf arg.Value < 50 Then
[| something = arg.Value > 15|]
Else
something = False
End If

Return something
End Function
End Class",
"Public Class Class1
Private Function Method(arg As Integer?) As Boolean
Dim something As Boolean
If arg.HasValue Then
something = True
ElseIf arg.Value < 50 Then
something = {|Rename:NewMethod|}(arg)
Else
something = False
End If

Return something
End Function

Private Shared Function NewMethod(arg As Integer?) As Boolean
Return arg.Value > 15
End Function
End Class")
End Function
End Class
End Namespace
Loading