[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(