@@ -34,7 +34,7 @@ public class ElementOrderCodeFixProvider : CodeFixProvider
3434 /// <inheritdoc/>
3535 public override FixAllProvider GetFixAllProvider()
3636 {
37- return CustomFixAllProviders.BatchFixer ;
37+ return FixAll.Instance ;
3838 }
3939
4040 /// <inheritdoc/>
@@ -58,21 +58,31 @@ private static async Task<Document> GetTransformedDocumentAsync(Document documen
5858 return document;
5959 }
6060
61+ syntaxRoot = UpdateSyntaxRoot(memberDeclaration, syntaxRoot);
62+
63+ return document.WithSyntaxRoot(syntaxRoot);
64+ }
65+
66+ private static SyntaxNode UpdateSyntaxRoot(MemberDeclarationSyntax memberDeclaration, SyntaxNode syntaxRoot)
67+ {
6168 var parentDeclaration = memberDeclaration.Parent;
69+
6270 if (parentDeclaration is TypeDeclarationSyntax)
6371 {
64- syntaxRoot = HandleTypeDeclaration(memberDeclaration, (TypeDeclarationSyntax)parentDeclaration, syntaxRoot);
72+ return HandleTypeDeclaration(memberDeclaration, (TypeDeclarationSyntax)parentDeclaration, syntaxRoot);
6573 }
66- else if (parentDeclaration is NamespaceDeclarationSyntax)
74+
75+ if (parentDeclaration is NamespaceDeclarationSyntax)
6776 {
68- syntaxRoot = HandleNamespaceDeclaration(memberDeclaration, (NamespaceDeclarationSyntax)parentDeclaration, syntaxRoot);
77+ return HandleNamespaceDeclaration(memberDeclaration, (NamespaceDeclarationSyntax)parentDeclaration, syntaxRoot);
6978 }
70- else if (parentDeclaration is CompilationUnitSyntax)
79+
80+ if (parentDeclaration is CompilationUnitSyntax)
7181 {
72- syntaxRoot = HandleCompilationUnitDeclaration(memberDeclaration, (CompilationUnitSyntax)parentDeclaration, syntaxRoot);
82+ return HandleCompilationUnitDeclaration(memberDeclaration, (CompilationUnitSyntax)parentDeclaration, syntaxRoot);
7383 }
7484
75- return document.WithSyntaxRoot( syntaxRoot) ;
85+ return syntaxRoot;
7686 }
7787
7888 private static SyntaxNode HandleTypeDeclaration(MemberDeclarationSyntax memberDeclaration, TypeDeclarationSyntax typeDeclarationNode, SyntaxNode syntaxRoot)
@@ -122,5 +132,31 @@ private static SyntaxNode MoveMember(SyntaxNode root, MemberDeclarationSyntax fi
122132 var fieldToMoveTracked = root.GetCurrentNodes(field).Last();
123133 return root.RemoveNode(fieldToMoveTracked, SyntaxRemoveOptions.KeepNoTrivia);
124134 }
135+
136+ private class FixAll : DocumentBasedFixAllProvider
137+ {
138+ public static FixAllProvider Instance { get; } = new FixAll();
139+
140+ protected override string CodeActionTitle => OrderingResources.ElementOrderCodeFix;
141+
142+ protected override async Task<SyntaxNode> FixAllInDocumentAsync(FixAllContext fixAllContext, Document document)
143+ {
144+ var diagnostics = await fixAllContext.GetDocumentDiagnosticsAsync(document).ConfigureAwait(false);
145+ var syntaxRoot = await document.GetSyntaxRootAsync().ConfigureAwait(false);
146+
147+ foreach (var diagnostic in diagnostics)
148+ {
149+ var memberDeclaration = syntaxRoot.FindNode(diagnostic.Location.SourceSpan).FirstAncestorOrSelf<MemberDeclarationSyntax>();
150+ if (memberDeclaration == null)
151+ {
152+ continue;
153+ }
154+
155+ syntaxRoot = UpdateSyntaxRoot(memberDeclaration, syntaxRoot);
156+ }
157+
158+ return syntaxRoot;
159+ }
160+ }
125161 }
126162}
0 commit comments