diff --git a/ChangeLog.md b/ChangeLog.md index 76d113c974..f0629df64f 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Improve inversion of logical expressions to handling additional cases ([#1086](https://github.com/josefpihrt/roslynator/pull/1086)). - Fix [RCS1084](https://github.com/JosefPihrt/Roslynator/blob/main/docs/analyzers/RCS1084.md) ([#1085](https://github.com/josefpihrt/roslynator/pull/1085)). +- Fix [RCS1169](https://github.com/JosefPihrt/Roslynator/blob/main/docs/analyzers/RCS1169.md) ([#1092](https://github.com/JosefPihrt/Roslynator/pull/1092)). ## [4.3.0] - 2023-04-24 diff --git a/src/Analyzers/CSharp/Analysis/MakeMemberReadOnly/MakeMemberReadOnlyWalker.cs b/src/Analyzers/CSharp/Analysis/MakeMemberReadOnly/MakeMemberReadOnlyWalker.cs index ffdc44955e..baab24a662 100644 --- a/src/Analyzers/CSharp/Analysis/MakeMemberReadOnly/MakeMemberReadOnlyWalker.cs +++ b/src/Analyzers/CSharp/Analysis/MakeMemberReadOnly/MakeMemberReadOnlyWalker.cs @@ -67,6 +67,13 @@ public override void VisitAssignedExpression(ExpressionSyntax expression) { SyntaxKind kind = expression.Kind(); + if (kind == SyntaxKind.SuppressNullableWarningExpression) + { + var postfixUnaryExpression = (PostfixUnaryExpressionSyntax)expression; + expression = postfixUnaryExpression.Operand; + kind = expression.Kind(); + } + if (kind == SyntaxKind.IdentifierName) { AnalyzeAssigned((IdentifierNameSyntax)expression); @@ -130,10 +137,8 @@ public override void VisitRefExpression(RefExpressionSyntax node) { VisitAssignedExpression(expression); } - else - { - base.VisitRefExpression(node); - } + + base.VisitRefExpression(node); } public override void VisitLocalFunctionStatement(LocalFunctionStatementSyntax node) diff --git a/src/Tests/Analyzers.Tests/RCS1169MakeFieldReadOnlyTests.cs b/src/Tests/Analyzers.Tests/RCS1169MakeFieldReadOnlyTests.cs index c8f0fe2bb9..2c7fa37c51 100644 --- a/src/Tests/Analyzers.Tests/RCS1169MakeFieldReadOnlyTests.cs +++ b/src/Tests/Analyzers.Tests/RCS1169MakeFieldReadOnlyTests.cs @@ -348,6 +348,33 @@ ref int M() return ref _f; } } +"); + } + + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.MakeFieldReadOnly)] + public async Task TestNoDiagnostic_SuppressNullableWarning() + { + await VerifyNoDiagnosticAsync(@" +class C +{ + int _a; + + void M(ref int x) {} + void M2() {M(ref _a!);} +} +"); + } + + [Fact, Trait(Traits.Analyzer, DiagnosticIdentifiers.MakeFieldReadOnly)] + public async Task TestNoDiagnostic_RefInRef() + { + await VerifyNoDiagnosticAsync(@" +using System.Runtime.CompilerServices; +class C +{ + int _a; + ref int M2() {return ref Unsafe.Add(ref _a, 3);} +} "); } }