提交 1102ba50 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #17868 from CyrusNajmabadi/missingParameterList

VB parameter lists can be missing.  Be resilient to that.
......@@ -409,9 +409,7 @@ public static SyntaxToken WithoutTrivia(this SyntaxToken token)
/// <summary>
/// Creates a new node from this node with the trailing trivia removed.
/// </summary>
public static TSyntax WithoutTrailingTrivia<TSyntax>(
this TSyntax node
) where TSyntax : SyntaxNode
public static TSyntax WithoutTrailingTrivia<TSyntax>(this TSyntax node) where TSyntax : SyntaxNode
{
return node.WithTrailingTrivia((IEnumerable<SyntaxTrivia>)null);
}
......
......@@ -27,6 +27,22 @@ End class",
End class")
End Function
<WorkItem(17368, "https://github.com/dotnet/roslyn/issues/17368")>
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)>
Public Async Function TestMissingParameterList() As Task
Await TestInRegularAndScript1Async(
"class C
function [||]GetFoo as integer
End function
End class",
"class C
ReadOnly Property Foo as integer
Get
End Get
End Property
End class")
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)>
Public Async Function TestMethodWithoutGetName() As Task
Await TestInRegularAndScriptAsync(
......
......@@ -68,8 +68,7 @@ Module Program
Async Function TestAsync() As Task(Of Integer)
Await Task.Delay(1)
Function Sub
End Module"
)
End Module")
End Function
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsMakeMethodAsynchronous)>
......@@ -389,5 +388,25 @@ End Module
</File>
Await TestAsync(initial, expected, ignoreTrivia:=False)
End Function
<WorkItem(17368, "https://github.com/dotnet/roslyn/issues/17368")>
<Fact, Trait(Traits.Feature, Traits.Features.CodeActionsMakeMethodAsynchronous)>
Public Async Function TestWithMissingParameterList() As Task
Await TestInRegularAndScriptAsync(
"Imports System
Imports System.Threading.Tasks
Module Program
Sub Test ' Comment
[|Await Task.Delay(1)|]
End Sub
End Module",
"Imports System
Imports System.Threading.Tasks
Module Program
Async Function TestAsync As Task ' Comment
Await Task.Delay(1)
End Function
End Module", ignoreTrivia:=False)
End Function
End Class
End Namespace
\ No newline at end of file
......@@ -91,16 +91,19 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.MakeMethodAsynchronous
' Have to convert this sub into a func.
Dim subStatement = node.SubOrFunctionStatement
Dim asClause = SyntaxFactory.SimpleAsClause(taskType.GenerateTypeSyntax()).
WithTrailingTrivia(subStatement.ParameterList.GetTrailingTrivia())
Dim asClause =
SyntaxFactory.SimpleAsClause(taskType.GenerateTypeSyntax()).
WithTrailingTrivia(
If(subStatement.ParameterList?.GetTrailingTrivia(),
subStatement.GetTrailingTrivia()))
Dim functionStatement = SyntaxFactory.FunctionStatement(
subStatement.AttributeLists,
subStatement.Modifiers.Add(s_asyncToken),
SyntaxFactory.Token(SyntaxKind.FunctionKeyword).WithTriviaFrom(subStatement.SubOrFunctionKeyword),
subStatement.Identifier,
subStatement.TypeParameterList,
subStatement.ParameterList.WithoutTrailingTrivia(),
subStatement.Identifier.WithTrailingTrivia(),
subStatement.TypeParameterList?.WithoutTrailingTrivia(),
subStatement.ParameterList?.WithoutTrailingTrivia(),
asClause,
subStatement.HandlesClause,
subStatement.ImplementsClause)
......
......@@ -39,8 +39,15 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeRefactorings.ReplaceMethodWithP
Return Nothing
End If
If position > containingMethod.ParameterList.Span.End Then
Return Nothing
' Parameter lists in VB are optional and may not be provided.
If containingMethod.ParameterList Is Nothing Then
If position > containingMethod.Span.End Then
Return Nothing
End If
Else
If position > containingMethod.ParameterList.Span.End Then
Return Nothing
End If
End If
Return containingMethod
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册