[analysis_server] Use existing context when computing edits for an LSP fix-all request

Fixes https://github.com/Dart-Code/Dart-Code/issues/3469.

Change-Id: I28812eda6b3f2263c0a341309719e8adeb1a143e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/206784
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart
index 784e2fe..4d4f523 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/commands/fix_all.dart
@@ -12,7 +12,6 @@
 import 'package:analysis_server/src/lsp/progress.dart';
 import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
 import 'package:analysis_server/src/services/correction/change_workspace.dart';
-import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
 
 class FixAllCommandHandler extends SimpleEditCommandHandler {
   FixAllCommandHandler(LspAnalysisServer server) : super(server);
@@ -48,14 +47,13 @@
       final processor =
           BulkFixProcessor(server.instrumentationService, workspace);
 
-      final collection = AnalysisContextCollectionImpl(
-        includedPaths: [path],
-        resourceProvider: server.resourceProvider,
-        sdkPath: server.sdkManager.defaultSdkDirectory,
-      );
-      final changeBuilder = await processor.fixErrors(collection.contexts);
-      final change = changeBuilder.sourceChange;
+      final context = server.contextManager.getContextFor(path);
+      if (context == null) {
+        return success(null);
+      }
 
+      final changeBuilder = await processor.fixErrorsForFile(context, path);
+      final change = changeBuilder.sourceChange;
       if (change.edits.isEmpty) {
         return success(null);
       }
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index e2539fa..7313659 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -182,6 +182,22 @@
     return builder;
   }
 
+  /// Return a change builder that has been used to create fixes for the
+  /// diagnostics in [file] in the given [context].
+  Future<ChangeBuilder> fixErrorsForFile(
+      AnalysisContext context, String path) async {
+    var pathContext = context.contextRoot.resourceProvider.pathContext;
+
+    if (file_paths.isDart(pathContext, path) && !file_paths.isGenerated(path)) {
+      var library = await context.currentSession.getResolvedLibrary(path);
+      if (library is ResolvedLibraryResult) {
+        await _fixErrorsInLibrary(library);
+      }
+    }
+
+    return builder;
+  }
+
   /// Return a change builder that has been used to create all fixes for a
   /// specific diagnostic code in the given [unit].
   Future<ChangeBuilder> fixOfTypeInUnit(