@@ -15,6 +15,7 @@ namespace StyleCop.Analyzers.OrderingRules
1515 using Microsoft . CodeAnalysis . CodeFixes ;
1616 using Microsoft . CodeAnalysis . CSharp ;
1717 using Microsoft . CodeAnalysis . CSharp . Syntax ;
18+ using Settings . ObjectModel ;
1819
1920 /// <summary>
2021 /// Implements code fixes for element ordering rules.
@@ -30,8 +31,7 @@ internal class ElementOrderCodeFixProvider : CodeFixProvider
3031 SA1202ElementsMustBeOrderedByAccess . DiagnosticId ,
3132 SA1203ConstantsMustAppearBeforeFields . DiagnosticId ,
3233 SA1204StaticElementsMustAppearBeforeInstanceElements . DiagnosticId ,
33- SA1214StaticReadonlyElementsMustAppearBeforeStaticNonReadonlyElements . DiagnosticId ,
34- SA1215InstanceReadonlyElementsMustAppearBeforeInstanceNonReadonlyElements . DiagnosticId ) ;
34+ SA1214ReadonlyElementsMustAppearBeforeNonReadonlyElements . DiagnosticId ) ;
3535
3636 /// <inheritdoc/>
3737 public override FixAllProvider GetFixAllProvider ( )
@@ -57,7 +57,8 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context)
5757
5858 private static async Task < Document > GetTransformedDocumentAsync ( Document document , Diagnostic diagnostic , CancellationToken cancellationToken )
5959 {
60- var orderingChecks = await GetEnabledRulesForDocumentAsync ( document , cancellationToken ) . ConfigureAwait ( false ) ;
60+ var settings = SettingsHelper . GetStyleCopSettings ( document . Project . AnalyzerOptions , cancellationToken ) ;
61+ var elementOrder = settings . OrderingRules . ElementOrder ;
6162 var syntaxRoot = await document . GetSyntaxRootAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
6263 var indentationOptions = IndentationOptions . FromDocument ( document ) ;
6364
@@ -67,68 +68,57 @@ private static async Task<Document> GetTransformedDocumentAsync(Document documen
6768 return document ;
6869 }
6970
70- syntaxRoot = UpdateSyntaxRoot ( memberDeclaration , orderingChecks , syntaxRoot , indentationOptions ) ;
71+ syntaxRoot = UpdateSyntaxRoot ( memberDeclaration , elementOrder , syntaxRoot , indentationOptions ) ;
7172
7273 return document . WithSyntaxRoot ( syntaxRoot ) ;
7374 }
7475
75- private static async Task < ElementOrderingChecks > GetEnabledRulesForDocumentAsync ( Document document , CancellationToken cancellationToken )
76- {
77- SemanticModel semanticModel ;
78- if ( ! document . TryGetSemanticModel ( out semanticModel ) )
79- {
80- semanticModel = await document . GetSemanticModelAsync ( cancellationToken ) . ConfigureAwait ( false ) ;
81- }
82-
83- return ElementOrderingChecks . GetElementOrderingChecksForSemanticModel ( semanticModel ) ;
84- }
85-
86- private static SyntaxNode UpdateSyntaxRoot ( MemberDeclarationSyntax memberDeclaration , ElementOrderingChecks checks , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
76+ private static SyntaxNode UpdateSyntaxRoot ( MemberDeclarationSyntax memberDeclaration , ImmutableArray < OrderingTrait > elementOrder , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
8777 {
8878 var parentDeclaration = memberDeclaration . Parent ;
89- var memberToMove = new MemberOrderHelper ( memberDeclaration , checks ) ;
79+ var memberToMove = new MemberOrderHelper ( memberDeclaration , elementOrder ) ;
9080
9181 if ( parentDeclaration is TypeDeclarationSyntax )
9282 {
93- return HandleTypeDeclaration ( memberToMove , ( TypeDeclarationSyntax ) parentDeclaration , checks , syntaxRoot , indentationOptions ) ;
83+ return HandleTypeDeclaration ( memberToMove , ( TypeDeclarationSyntax ) parentDeclaration , elementOrder , syntaxRoot , indentationOptions ) ;
9484 }
9585
9686 if ( parentDeclaration is NamespaceDeclarationSyntax )
9787 {
98- return HandleNamespaceDeclaration ( memberToMove , ( NamespaceDeclarationSyntax ) parentDeclaration , checks , syntaxRoot , indentationOptions ) ;
88+ return HandleNamespaceDeclaration ( memberToMove , ( NamespaceDeclarationSyntax ) parentDeclaration , elementOrder , syntaxRoot , indentationOptions ) ;
9989 }
10090
10191 if ( parentDeclaration is CompilationUnitSyntax )
10292 {
103- return HandleCompilationUnitDeclaration ( memberToMove , ( CompilationUnitSyntax ) parentDeclaration , checks , syntaxRoot , indentationOptions ) ;
93+ return HandleCompilationUnitDeclaration ( memberToMove , ( CompilationUnitSyntax ) parentDeclaration , elementOrder , syntaxRoot , indentationOptions ) ;
10494 }
10595
10696 return syntaxRoot ;
10797 }
10898
109- private static SyntaxNode HandleTypeDeclaration ( MemberOrderHelper memberOrder , TypeDeclarationSyntax typeDeclarationNode , ElementOrderingChecks checks , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
99+ private static SyntaxNode HandleTypeDeclaration ( MemberOrderHelper memberOrder , TypeDeclarationSyntax typeDeclarationNode , ImmutableArray < OrderingTrait > elementOrder , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
110100 {
111- return OrderMember ( memberOrder , typeDeclarationNode . Members , checks , syntaxRoot , indentationOptions ) ;
101+ return OrderMember ( memberOrder , typeDeclarationNode . Members , elementOrder , syntaxRoot , indentationOptions ) ;
112102 }
113103
114- private static SyntaxNode HandleCompilationUnitDeclaration ( MemberOrderHelper memberOrder , CompilationUnitSyntax compilationUnitDeclaration , ElementOrderingChecks checks , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
104+ private static SyntaxNode HandleCompilationUnitDeclaration ( MemberOrderHelper memberOrder , CompilationUnitSyntax compilationUnitDeclaration , ImmutableArray < OrderingTrait > elementOrder , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
115105 {
116- return OrderMember ( memberOrder , compilationUnitDeclaration . Members , checks , syntaxRoot , indentationOptions ) ;
106+ return OrderMember ( memberOrder , compilationUnitDeclaration . Members , elementOrder , syntaxRoot , indentationOptions ) ;
117107 }
118108
119- private static SyntaxNode HandleNamespaceDeclaration ( MemberOrderHelper memberOrder , NamespaceDeclarationSyntax namespaceDeclaration , ElementOrderingChecks checks , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
109+ private static SyntaxNode HandleNamespaceDeclaration ( MemberOrderHelper memberOrder , NamespaceDeclarationSyntax namespaceDeclaration , ImmutableArray < OrderingTrait > elementOrder , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
120110 {
121- return OrderMember ( memberOrder , namespaceDeclaration . Members , checks , syntaxRoot , indentationOptions ) ;
111+ return OrderMember ( memberOrder , namespaceDeclaration . Members , elementOrder , syntaxRoot , indentationOptions ) ;
122112 }
123113
124- private static SyntaxNode OrderMember ( MemberOrderHelper memberOrder , SyntaxList < MemberDeclarationSyntax > members , ElementOrderingChecks checks , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
114+ private static SyntaxNode OrderMember ( MemberOrderHelper memberOrder , SyntaxList < MemberDeclarationSyntax > members , ImmutableArray < OrderingTrait > elementOrder , SyntaxNode syntaxRoot , IndentationOptions indentationOptions )
125115 {
126116 var memberIndex = members . IndexOf ( memberOrder . Member ) ;
127117 MemberOrderHelper target = default ( MemberOrderHelper ) ;
128118
129119 for ( var i = memberIndex - 1 ; i >= 0 ; -- i )
130120 {
131- var orderHelper = new MemberOrderHelper ( members [ i ] , checks ) ;
121+ var orderHelper = new MemberOrderHelper ( members [ i ] , elementOrder ) ;
132122 if ( orderHelper . Priority < memberOrder . Priority )
133123 {
134124 target = orderHelper ;
@@ -276,7 +266,8 @@ protected override async Task<SyntaxNode> FixAllInDocumentAsync(FixAllContext fi
276266 }
277267
278268 var indentationOptions = IndentationOptions . FromDocument ( document ) ;
279- var orderingChecks = await GetEnabledRulesForDocumentAsync ( document , fixAllContext . CancellationToken ) . ConfigureAwait ( false ) ;
269+ var settings = SettingsHelper . GetStyleCopSettings ( document . Project . AnalyzerOptions , fixAllContext . CancellationToken ) ;
270+ var elementOrder = settings . OrderingRules . ElementOrder ;
280271 var syntaxRoot = await document . GetSyntaxRootAsync ( ) . ConfigureAwait ( false ) ;
281272
282273 var trackedDiagnosticMembers = new List < MemberDeclarationSyntax > ( ) ;
@@ -296,7 +287,7 @@ protected override async Task<SyntaxNode> FixAllInDocumentAsync(FixAllContext fi
296287 foreach ( var member in trackedDiagnosticMembers )
297288 {
298289 var memberDeclaration = syntaxRoot . GetCurrentNode ( member ) ;
299- syntaxRoot = UpdateSyntaxRoot ( memberDeclaration , orderingChecks , syntaxRoot , indentationOptions ) ;
290+ syntaxRoot = UpdateSyntaxRoot ( memberDeclaration , elementOrder , syntaxRoot , indentationOptions ) ;
300291 }
301292
302293 return syntaxRoot ;
0 commit comments