提交 4ecda670 编写于 作者: M Manish Vasani

Handle newly added property sub-pattern operation in OperationExtensions.GetValueUsageInfo

Fix #40499
上级 a1862b77
...@@ -7415,6 +7415,60 @@ string M(object obj) ...@@ -7415,6 +7415,60 @@ string M(object obj)
}", new TestParameters(options: PreferUnusedLocal, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8))); }", new TestParameters(options: PreferUnusedLocal, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8)));
} }
[WorkItem(40499, "https://github.com/dotnet/roslyn/issues/40499")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
public async Task LocalUsedWithPropertySubPattern()
{
await TestDiagnosticMissingAsync(
@"class C
{
public object P { get; }
void M()
{
C [|c|] = new C();
var x = c is { P : int i };
}
}", new TestParameters(options: PreferDiscard, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8)));
}
[WorkItem(40499, "https://github.com/dotnet/roslyn/issues/40499")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
public async Task UnusedLocalDefinedInPropertySubPattern_PreferDiscard()
{
await TestInRegularAndScriptAsync(
@"class C
{
public object P { get; }
void M(C c)
{
var x = c is { P : int [|i|] };
}
}",
@"class C
{
public object P { get; }
void M(C c)
{
var x = c is { P : int _ };
}
}", options: PreferDiscard, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8));
}
[WorkItem(40499, "https://github.com/dotnet/roslyn/issues/40499")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
public async Task UnusedLocalDefinedInPropertySubPattern_PreferUnusedLocal()
{
await TestDiagnosticMissingAsync(
@"class C
{
public object P { get; }
void M(C c)
{
var x = c is { P : int [|i|] };
}
}", new TestParameters(options: PreferUnusedLocal, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8)));
}
[WorkItem(38640, "https://github.com/dotnet/roslyn/issues/38640")] [WorkItem(38640, "https://github.com/dotnet/roslyn/issues/38640")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)] [Fact, Trait(Traits.Feature, Traits.Features.CodeActionsRemoveUnusedValues)]
public async Task DeclarationPatternInSwitchExpressionArm_UnusedLocal_PreferDiscard() public async Task DeclarationPatternInSwitchExpressionArm_UnusedLocal_PreferDiscard()
......
...@@ -91,6 +91,14 @@ public static ValueUsageInfo GetValueUsageInfo(this IOperation operation) ...@@ -91,6 +91,14 @@ public static ValueUsageInfo GetValueUsageInfo(this IOperation operation)
// //
return ValueUsageInfo.Write; return ValueUsageInfo.Write;
case IPropertySubpatternOperation _:
// A declaration pattern within a property sub-pattern is a
// write for the declared local.
// For example, 'x' is defined and assigned the value from 'obj.Property' below:
// if (obj is { Property : int x })
//
return ValueUsageInfo.Write;
default: default:
Debug.Fail("Unhandled declaration pattern context"); Debug.Fail("Unhandled declaration pattern context");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册