未验证 提交 f5a9d937 编写于 作者: M Manish Vasani 提交者: GitHub

Merge pull request #32919 from mavasani/Issue32842

Handle ICoalesceAssignmentOperation in GetValueUsageInfo(operation) h…
......@@ -2291,5 +2291,28 @@ static partial class B
</Project>
</Workspace>");
}
[Fact, WorkItem(32842, "https://github.com/dotnet/roslyn/issues/32842")]
public async Task FieldIsRead_NullCoalesceAssignment()
{
await TestDiagnosticMissingAsync(@"
public class MyClass
{
private MyClass [|_field|];
public MyClass Property => _field ??= new MyClass();
}", new TestParameters(retainNonFixableDiagnostics: true, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8)));
}
[Fact, WorkItem(32842, "https://github.com/dotnet/roslyn/issues/32842")]
public async Task FieldIsNotRead_NullCoalesceAssignment()
{
await TestDiagnosticsAsync(@"
public class MyClass
{
private MyClass [|_field|];
public void M() => _field ??= new MyClass();
}", new TestParameters(retainNonFixableDiagnostics: true, parseOptions: new CSharpParseOptions(LanguageVersion.CSharp8)),
expected: Diagnostic("IDE0052"));
}
}
}
......@@ -253,6 +253,8 @@ private void AnalyzeMemberReferenceOperation(OperationAnalysisContext operationC
{
Debug.Assert(memberReference.Parent is ICompoundAssignmentOperation compoundAssignment &&
compoundAssignment.Target == memberReference ||
memberReference.Parent is ICoalesceAssignmentOperation coalesceAssignment &&
coalesceAssignment.Target == memberReference ||
memberReference.Parent is IIncrementOrDecrementOperation ||
memberReference.Parent is IReDimClauseOperation reDimClause && reDimClause.Operand == memberReference);
......
......@@ -87,7 +87,7 @@ public static ValueUsageInfo GetValueUsageInfo(this IOperation operation)
if (operation.Parent is IAssignmentOperation assignmentOperation &&
assignmentOperation.Target == operation)
{
return operation.Parent.Kind == OperationKind.CompoundAssignment
return operation.Parent.Kind == OperationKind.CompoundAssignment || operation.Parent.Kind == OperationKind.CoalesceAssignment
? ValueUsageInfo.ReadWrite
: ValueUsageInfo.Write;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册