diff --git a/StyleCop.Analyzers/StyleCop.Analyzers.Test/OrderingRules/SA1215UnitTests.cs b/StyleCop.Analyzers/StyleCop.Analyzers.Test/OrderingRules/SA1215UnitTests.cs index e2192c68e..13341ce30 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers.Test/OrderingRules/SA1215UnitTests.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers.Test/OrderingRules/SA1215UnitTests.cs @@ -157,6 +157,23 @@ public async Task TestNonStaticFollowedByReadOnlyAtDifferentAccessLevelAsync() await this.VerifyCSharpDiagnosticAsync(testCode, EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false); } + /// + /// Verifies that the analyzer will properly handle const before readonly fields. + /// + /// A representing the asynchronous unit test. + [Fact] + public async Task TestConstBeforeReadonlyAsync() + { + var testCode = @"class TestClass +{ + private const int TestField1 = 1; + private readonly int TestField2 = 2; +} +"; + + await this.VerifyCSharpDiagnosticAsync(testCode, EmptyDiagnosticResults, CancellationToken.None).ConfigureAwait(false); + } + /// protected override IEnumerable GetCSharpDiagnosticAnalyzers() { diff --git a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs index 4d45ab499..41633c43f 100644 --- a/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs +++ b/StyleCop.Analyzers/StyleCop.Analyzers/OrderingRules/SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements.cs @@ -54,7 +54,7 @@ private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) var previousFieldReadonly = true; var previousAccessLevel = AccessLevel.NotSpecified; - var previousMemberStatic = true; + var previousMemberStaticOrConst = true; foreach (var member in typeDeclaration.Members) { var field = member as FieldDeclarationSyntax; @@ -66,10 +66,10 @@ private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) var currentFieldReadonly = field.Modifiers.Any(SyntaxKind.ReadOnlyKeyword); var currentAccessLevel = AccessLevelHelper.GetAccessLevel(field.Modifiers); currentAccessLevel = currentAccessLevel == AccessLevel.NotSpecified ? AccessLevel.Private : currentAccessLevel; - var currentMemberStatic = field.Modifiers.Any(SyntaxKind.StaticKeyword); + var currentMemberStaticOrConst = field.Modifiers.Any(SyntaxKind.StaticKeyword) || field.Modifiers.Any(SyntaxKind.ConstKeyword); if (currentAccessLevel == previousAccessLevel - && !currentMemberStatic - && !previousMemberStatic + && !currentMemberStaticOrConst + && !previousMemberStaticOrConst && currentFieldReadonly && !previousFieldReadonly) { @@ -78,7 +78,7 @@ private static void HandleTypeDeclaration(SyntaxNodeAnalysisContext context) previousFieldReadonly = currentFieldReadonly; previousAccessLevel = currentAccessLevel; - previousMemberStatic = currentMemberStatic; + previousMemberStaticOrConst = currentMemberStaticOrConst; } } }