未验证 提交 4efbe40d 编写于 作者: C CyrusNajmabadi 提交者: GitHub

Merge pull request #42673 from CyrusNajmabadi/genMethOnNullableStruct

Support generate-method on nullable structs.
......@@ -6856,6 +6856,35 @@ internal object C()
}");
}
[WorkItem(39001, "https://github.com/dotnet/roslyn/issues/39001")]
[WorkItem(1064748, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1064748")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateMethod)]
public async Task TestGenerateMethodInConditionalAccess9()
{
await TestInRegularAndScriptAsync(
@"struct C
{
void Main(C? c)
{
int? v = c?.[|Bar|]();
}
}",
@"using System;
struct C
{
void Main(C? c)
{
int? v = c?.Bar();
}
private int Bar()
{
throw new NotImplementedException();
}
}");
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsGenerateMethod)]
public async Task TestGenerateMethodInPropertyInitializer()
{
......
......@@ -3754,6 +3754,29 @@ End Class",
index:=1)
End Function
<WorkItem(39001, "https://github.com/dotnet/roslyn/issues/39001")>
<WorkItem(1064815, "http://vstfdevdiv:8080/DevDiv2/DevDiv/_workitems/edit/1064815")>
<Fact(), Trait(Traits.Feature, Traits.Features.CodeActionsGenerateMethod)>
Public Async Function TestGenerateMethodConditionalAccess5() As Task
Await TestInRegularAndScriptAsync(
"Public Structure C
Sub Main(a As C?)
Dim x As Integer? = a?[|.B|]()
End Sub
End Structure",
"Imports System
Public Structure C
Sub Main(a As C?)
Dim x As Integer? = a?.B()
End Sub
Private Function B() As Integer
Throw New NotImplementedException()
End Function
End Structure")
End Function
<Fact(), Trait(Traits.Feature, Traits.Features.CodeActionsGenerateMethod)>
Public Async Function TestGenerateMethodConditionalInPropertyInitializer() As Task
Await TestInRegularAndScriptAsync(
......
......@@ -115,6 +115,11 @@ protected AbstractGenerateMemberService()
{
DetermineTypeToGenerateInWorker(
semanticModel, beforeDotExpression, out typeToGenerateIn, out isStatic, cancellationToken);
if (typeToGenerateIn.IsNullable(out var underlyingType) &&
underlyingType is INamedTypeSymbol underlyingNamedType)
{
typeToGenerateIn = underlyingNamedType;
}
}
return;
......
......@@ -83,7 +83,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.GenerateMember.GenerateMethod
Dim memberAccess = TryCast(simpleName?.Parent, MemberAccessExpressionSyntax)
Dim conditionalMemberAccessInvocationExpression = TryCast(simpleName?.Parent?.Parent?.Parent, ConditionalAccessExpressionSyntax)
Dim conditionalMemberAccessSimpleMemberAccess = TryCast(simpleName?.Parent?.Parent, ConditionalAccessExpressionSyntax)
If memberAccess?.Name Is simpleName Then
If memberAccess?.Name Is simpleName AndAlso memberAccess.Expression IsNot Nothing Then
simpleNameOrMemberAccessExpression = memberAccess
ElseIf TryCast(TryCast(conditionalMemberAccessInvocationExpression?.WhenNotNull, InvocationExpressionSyntax)?.Expression, MemberAccessExpressionSyntax)?.Name Is simpleName Then
simpleNameOrMemberAccessExpression = conditionalMemberAccessInvocationExpression
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册