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;
}
}
}