diff --git a/analyzers/src/SonarAnalyzer.CSharp/Rules/StaticFieldVisible.cs b/analyzers/src/SonarAnalyzer.CSharp/Rules/StaticFieldVisible.cs index 786665489da..5d1d9e071fc 100644 --- a/analyzers/src/SonarAnalyzer.CSharp/Rules/StaticFieldVisible.cs +++ b/analyzers/src/SonarAnalyzer.CSharp/Rules/StaticFieldVisible.cs @@ -49,7 +49,8 @@ public sealed class StaticFieldVisible : SonarDiagnosticAnalyzer : Enumerable.Empty(); private static bool FieldIsRelevant(FieldDeclarationSyntax node) => - !node.Modifiers.Any(SyntaxKind.PrivateKeyword) + node.Modifiers.Any() + && !node.Modifiers.Any(SyntaxKind.PrivateKeyword) && node.Modifiers.Any(SyntaxKind.StaticKeyword) && !(node.Modifiers.Any(SyntaxKind.ConstKeyword) || node.Modifiers.Any(SyntaxKind.ReadOnlyKeyword)); diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/StaticFieldVisible.cs b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/StaticFieldVisible.cs index b5b0a3d4137..371ba25e890 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/StaticFieldVisible.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/StaticFieldVisible.cs @@ -20,6 +20,8 @@ public class StaticFieldVisible private static double Pi8 = 3.14; private double Pi9 = 3.14; + static double Pi10 = 3.14; // Noncompliant "internal" is the default if no access modifier is specified + // https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers [ThreadStatic] public static int value; // Compliant, thread static field values are not shared between threads