Adds library result

R=scheglov@google.com

Fixes https://github.com/dart-lang/sdk/issues/57092

Change-Id: I125c53e138c97e57fc22d69b2362351ddcbb6b4b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/395420
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Felipe Morschel <fmorschel.dev@gmail.com>
diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart b/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
index b5d93f9..11675b0 100644
--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
+++ b/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
@@ -16,19 +16,22 @@
   /// fix from being composed.
   InstrumentationService get instrumentationService;
 
+  /// The resolved library result in which assist operates.
+  ResolvedLibraryResult get libraryResult;
+
   /// A mapping of [ProducerGenerator]s to the set of lint names with which they
   /// are associated (can fix).
   Map<ProducerGenerator, Set<LintCode>> get producerGeneratorsForLintRules;
 
-  /// The resolution result in which assist operates.
-  ResolvedUnitResult get resolveResult;
-
   /// The length of the selection.
   int get selectionLength;
 
   /// The start of the selection.
   int get selectionOffset;
 
+  /// The unit result in which assist operates.
+  ResolvedUnitResult get unitResult;
+
   /// The workspace in which the fix contributor operates.
   ChangeWorkspace get workspace;
 }
diff --git a/pkg/analysis_server/lib/src/cider/assists.dart b/pkg/analysis_server/lib/src/cider/assists.dart
index 52a376c..548341a 100644
--- a/pkg/analysis_server/lib/src/cider/assists.dart
+++ b/pkg/analysis_server/lib/src/cider/assists.dart
@@ -35,7 +35,9 @@
     int length,
   ) async {
     var result = <Assist>[];
-    var resolvedUnit = await _fileResolver.resolve(path: path);
+    var resolvedLibrary = await _fileResolver.resolveLibrary2(path: path);
+    var resolvedUnit = resolvedLibrary.unitWithPath(path)!;
+
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(lineNumber) + colNumber;
 
@@ -45,6 +47,7 @@
         var context = DartAssistContextImpl(
           InstrumentationService.NULL_SERVICE,
           workspace,
+          resolvedLibrary,
           resolvedUnit,
           _producerGeneratorsForLintRules,
           offset,
diff --git a/pkg/analysis_server/lib/src/cider/fixes.dart b/pkg/analysis_server/lib/src/cider/fixes.dart
index 78628ac..ec1c45a6 100644
--- a/pkg/analysis_server/lib/src/cider/fixes.dart
+++ b/pkg/analysis_server/lib/src/cider/fixes.dart
@@ -39,7 +39,8 @@
   /// Compute quick fixes for errors on the line with the [offset].
   Future<List<CiderErrorFixes>> compute(String path, int lineNumber) async {
     var result = <CiderErrorFixes>[];
-    var resolvedUnit = await _fileResolver.resolve(path: path);
+    var resolvedLibrary = await _fileResolver.resolveLibrary2(path: path);
+    var resolvedUnit = resolvedLibrary.unitWithPath(path)!;
 
     var lineInfo = resolvedUnit.lineInfo;
 
@@ -51,7 +52,8 @@
           var context = _CiderDartFixContextImpl(
             _fileResolver,
             workspace: workspace,
-            resolvedResult: resolvedUnit,
+            libraryResult: resolvedLibrary,
+            unitResult: resolvedUnit,
             error: error,
           );
 
@@ -75,7 +77,8 @@
   _CiderDartFixContextImpl(
     this._fileResolver, {
     required super.workspace,
-    required super.resolvedResult,
+    required super.libraryResult,
+    required super.unitResult,
     required super.error,
   }) : super(instrumentationService: InstrumentationService.NULL_SERVICE);
 
diff --git a/pkg/analysis_server/lib/src/g3/fixes.dart b/pkg/analysis_server/lib/src/g3/fixes.dart
index cdd0e78..b514fd2 100644
--- a/pkg/analysis_server/lib/src/g3/fixes.dart
+++ b/pkg/analysis_server/lib/src/g3/fixes.dart
@@ -66,8 +66,10 @@
     var analysisContext = collection.contextFor(path);
     var analysisSession = analysisContext.currentSession;
 
-    var unitResult = await analysisSession.getResolvedUnit(path);
-    unitResult as ResolvedUnitResult;
+    var resolvedLibrary = await analysisSession.getResolvedLibrary(path);
+    resolvedLibrary as ResolvedLibraryResult;
+
+    var unitResult = resolvedLibrary.unitWithPath(path)!;
 
     AnalysisError error;
     var errors = unitResult.errors;
@@ -95,7 +97,8 @@
     var context = DartFixContext(
       instrumentationService: InstrumentationService.NULL_SERVICE,
       workspace: workspace,
-      resolvedResult: unitResult,
+      libraryResult: resolvedLibrary,
+      unitResult: unitResult,
       error: error,
     );
 
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
index 28e5f4c..a01ab25 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_assists.dart
@@ -100,14 +100,16 @@
   ) async {
     var changes = <SourceChange>[];
 
-    var result = await server.getResolvedUnit(file);
+    var libraryResult = await server.getResolvedLibrary(file);
     server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
 
-    if (result != null) {
+    if (libraryResult != null) {
+      var unitResult = libraryResult.unitWithPath(file)!;
       var context = DartAssistContextImpl(
         server.instrumentationService,
         DartChangeWorkspace(await server.currentSessions),
-        result,
+        libraryResult,
+        unitResult,
         server.producerGeneratorsForLintRules,
         offset,
         length,
@@ -128,7 +130,7 @@
 length: $length
       ''';
         throw CaughtExceptionWithFiles(exception, stackTrace, {
-          file: result.content,
+          file: unitResult.content,
           'parameters': parametersFile,
         });
       }
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
index 7853329..8c37357 100644
--- a/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_get_fixes.dart
@@ -187,19 +187,21 @@
     int offset,
   ) async {
     var errorFixesList = <AnalysisErrorFixes>[];
-    var result = await server.getResolvedUnit(file);
+    var libraryResult = await server.getResolvedLibrary(file);
     server.requestStatistics?.addItemTimeNow(request, 'resolvedUnit');
-    if (result != null) {
-      var lineInfo = result.lineInfo;
+    if (libraryResult != null) {
+      var unitResult = libraryResult.unitWithPath(file)!;
+      var lineInfo = unitResult.lineInfo;
       var requestLine = lineInfo.getLocation(offset).lineNumber;
-      for (var error in result.errors) {
+      for (var error in unitResult.errors) {
         var errorLine = lineInfo.getLocation(error.offset).lineNumber;
         if (errorLine == requestLine) {
           var workspace = DartChangeWorkspace(await server.currentSessions);
           var context = DartFixContext(
             instrumentationService: server.instrumentationService,
             workspace: workspace,
-            resolvedResult: result,
+            libraryResult: libraryResult,
+            unitResult: unitResult,
             error: error,
           );
 
@@ -215,14 +217,14 @@
 error.errorCode: ${error.errorCode}
 ''';
             throw CaughtExceptionWithFiles(exception, stackTrace, {
-              file: result.content,
+              file: unitResult.content,
               'parameters': parametersFile,
             });
           }
 
           if (fixes.isNotEmpty) {
             fixes.sort(Fix.compareFixes);
-            var serverError = newAnalysisError_fromEngine(result, error);
+            var serverError = newAnalysisError_fromEngine(unitResult, error);
             var errorFixes = AnalysisErrorFixes(serverError);
             errorFixesList.add(errorFixes);
             for (var fix in fixes) {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart b/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart
index 3ed20f9..a3a45ea 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/code_actions/dart.dart
@@ -28,8 +28,8 @@
 /// Produces [CodeAction]s from Dart source commands, fixes, assists and
 /// refactors from the server.
 class DartCodeActionsProducer extends AbstractCodeActionsProducer {
-  ResolvedLibraryResult library;
-  ResolvedUnitResult unit;
+  ResolvedLibraryResult libraryResult;
+  ResolvedUnitResult unitResult;
   Range range;
   final OptionalVersionedTextDocumentIdentifier docIdentifier;
   final CodeActionTriggerKind? triggerKind;
@@ -39,8 +39,8 @@
     super.file,
     super.lineInfo,
     this.docIdentifier,
-    this.library,
-    this.unit, {
+    this.libraryResult,
+    this.unitResult, {
     required this.range,
     required super.offset,
     required super.length,
@@ -126,7 +126,8 @@
       var context = DartAssistContextImpl(
         server.instrumentationService,
         workspace,
-        unit,
+        libraryResult,
+        unitResult,
         server.producerGeneratorsForLintRules,
         offset,
         length,
@@ -137,8 +138,8 @@
       return assists.map((assist) {
         var action = createAssistAction(
           assist.change,
-          unit.path,
-          unit.lineInfo,
+          unitResult.path,
+          unitResult.lineInfo,
         );
         return (action: action, priority: assist.kind.priority);
       }).toList();
@@ -157,12 +158,12 @@
       return [];
     }
 
-    var lineInfo = unit.lineInfo;
+    var lineInfo = unitResult.lineInfo;
     var codeActions = <CodeActionWithPriority>[];
 
     try {
       var workspace = DartChangeWorkspace(await server.currentSessions);
-      for (var error in unit.errors) {
+      for (var error in unitResult.errors) {
         // Return fixes for any part of the line where a diagnostic is.
         // If a diagnostic spans multiple lines, the fix will be included for
         // all of those lines.
@@ -177,14 +178,15 @@
         var context = DartFixContext(
           instrumentationService: server.instrumentationService,
           workspace: workspace,
-          resolvedResult: unit,
+          libraryResult: libraryResult,
+          unitResult: unitResult,
           error: error,
         );
         var fixes = await computeFixes(context);
         if (fixes.isNotEmpty) {
           var diagnostic = toDiagnostic(
             server.uriConverter,
-            unit,
+            unitResult,
             error,
             supportedTags: supportedDiagnosticTags,
             clientSupportsCodeDescription: supportsCodeDescription,
@@ -227,8 +229,8 @@
       var context = RefactoringContext(
         server: server,
         startSessions: await server.currentSessions,
-        resolvedLibraryResult: library,
-        resolvedUnitResult: unit,
+        resolvedLibraryResult: libraryResult,
+        resolvedUnitResult: unitResult,
         clientCapabilities: capabilities,
         selectionOffset: offset,
         selectionLength: length,
@@ -244,7 +246,7 @@
         // Extract Method
         if (ExtractMethodRefactoring(
           server.searchEngine,
-          unit,
+          unitResult,
           offset,
           length,
         ).isAvailable()) {
@@ -258,7 +260,7 @@
         }
 
         // Extract Local Variable
-        if (ExtractLocalRefactoring(unit, offset, length).isAvailable()) {
+        if (ExtractLocalRefactoring(unitResult, offset, length).isAvailable()) {
           refactorActions.add(
             createRefactor(
               CodeActionKind.RefactorExtract,
@@ -271,7 +273,7 @@
         // Extract Widget
         if (ExtractWidgetRefactoring(
           server.searchEngine,
-          unit,
+          unitResult,
           offset,
           length,
         ).isAvailable()) {
@@ -290,7 +292,7 @@
         // Inline Local Variable
         if (InlineLocalRefactoring(
           server.searchEngine,
-          unit,
+          unitResult,
           offset,
         ).isAvailable()) {
           refactorActions.add(
@@ -305,7 +307,7 @@
         // Inline Method
         if (InlineMethodRefactoring(
           server.searchEngine,
-          unit,
+          unitResult,
           offset,
         ).isAvailable()) {
           refactorActions.add(
@@ -320,14 +322,14 @@
 
       // Converts/Rewrites
       if (shouldIncludeKind(CodeActionKind.RefactorRewrite)) {
-        var node = NodeLocator(offset).searchWithin(unit.unit);
+        var node = NodeLocator(offset).searchWithin(unitResult.unit);
         var element = server.getElementOfNode(node).asElement2;
 
         // Getter to Method
         if (element is GetterElement &&
             ConvertGetterToMethodRefactoring(
               server.refactoringWorkspace,
-              unit.session,
+              unitResult.session,
               element,
             ).isAvailable()) {
           refactorActions.add(
@@ -343,7 +345,7 @@
         if (element is ExecutableElement2 &&
             ConvertMethodToGetterRefactoring(
               server.refactoringWorkspace,
-              unit.session,
+              unitResult.session,
               element,
             ).isAvailable()) {
           refactorActions.add(
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index cfa6d81..35aa496 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -19,7 +19,10 @@
   final ChangeWorkspace workspace;
 
   @override
-  final ResolvedUnitResult resolveResult;
+  final ResolvedLibraryResult libraryResult;
+
+  @override
+  final ResolvedUnitResult unitResult;
 
   @override
   final Map<ProducerGenerator, Set<LintCode>> producerGeneratorsForLintRules;
@@ -33,7 +36,8 @@
   DartAssistContextImpl(
     this.instrumentationService,
     this.workspace,
-    this.resolveResult,
+    this.libraryResult,
+    this.unitResult,
     this.producerGeneratorsForLintRules,
     this.selectionOffset,
     this.selectionLength,
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 70e6ab6..949e6bc 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -178,7 +178,7 @@
   AssistProcessor(this._assistContext);
 
   Future<List<Assist>> compute() async {
-    if (isMacroGenerated(_assistContext.resolveResult.file.path)) {
+    if (isMacroGenerated(_assistContext.unitResult.file.path)) {
       return _assists;
     }
     await _addFromProducers();
@@ -201,9 +201,10 @@
 
   Future<void> _addFromProducers() async {
     var context = CorrectionProducerContext.createResolved(
+      libraryResult: _assistContext.libraryResult,
+      unitResult: _assistContext.unitResult,
       selectionOffset: _assistContext.selectionOffset,
       selectionLength: _assistContext.selectionLength,
-      resolvedResult: _assistContext.resolveResult,
     );
 
     Future<void> compute(CorrectionProducer producer) async {
@@ -258,15 +259,15 @@
     var selectionEnd =
         _assistContext.selectionOffset + _assistContext.selectionLength;
     var locator = NodeLocator(_assistContext.selectionOffset, selectionEnd);
-    var node = locator.searchWithin(_assistContext.resolveResult.unit);
+    var node = locator.searchWithin(_assistContext.unitResult.unit);
     if (node == null) {
       return false;
     }
 
     var fileOffset = node.offset;
-    for (var error in _assistContext.resolveResult.errors) {
+    for (var error in _assistContext.unitResult.errors) {
       var errorSource = error.source;
-      if (_assistContext.resolveResult.path == errorSource.fullName) {
+      if (_assistContext.unitResult.path == errorSource.fullName) {
         if (fileOffset >= error.offset &&
             fileOffset <= error.offset + error.length) {
           if (errorCodes.contains(error.errorCode)) {
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 733d48d..e4ef5e2 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
@@ -230,15 +230,15 @@
     if (file_paths.isDart(pathContext, path) &&
         !file_paths.isGenerated(path) &&
         !file_paths.isMacroGenerated(path)) {
-      var library = await performance.runAsync(
+      var libraryResult = await performance.runAsync(
         'getResolvedLibrary',
         (_) => context.currentSession.getResolvedContainingLibrary(path),
       );
-      var unit = library?.unitWithPath(path);
-      if (!isCancelled && library != null && unit != null) {
+      var unitResult = libraryResult?.unitWithPath(path);
+      if (!isCancelled && libraryResult != null && unitResult != null) {
         await _fixErrorsInLibraryUnit(
-          unit,
-          library,
+          libraryResult,
+          unitResult,
           autoTriggered: autoTriggered,
         );
       }
@@ -266,16 +266,16 @@
           continue;
         }
 
-        var result = context.currentSession.getParsedLibrary(path);
+        var parsedLibrary = context.currentSession.getParsedLibrary(path);
 
         if (isCancelled) {
           break;
         }
-        if (result is ParsedLibraryResult) {
+        if (parsedLibrary is ParsedLibraryResult) {
           var errorListener = RecordingErrorListener();
           var unitContexts = <LintRuleUnitContext>[];
 
-          for (var parsedUnit in result.units) {
+          for (var parsedUnit in parsedLibrary.units) {
             var errorReporter = ErrorReporter(
               errorListener,
               StringSource(parsedUnit.content, null),
@@ -293,7 +293,7 @@
             _computeParsedResultLint(unitContext, unitContexts);
           }
           await _fixErrorsInParsedLibrary(
-            result,
+            parsedLibrary,
             errorListener.errors,
             stopAfterFirst: false,
           );
@@ -424,13 +424,13 @@
         );
 
         // Get the list of imports used in the files.
-        var result = context.currentSession.getParsedLibrary(path);
-        if (result is! ParsedLibraryResult) {
+        var libraryResult = context.currentSession.getParsedLibrary(path);
+        if (libraryResult is! ParsedLibraryResult) {
           return (edits: fixes, details: details);
         }
 
-        for (var unit in result.units) {
-          var directives = unit.unit.directives;
+        for (var unitResult in libraryResult.units) {
+          var directives = unitResult.unit.directives;
           for (var directive in directives) {
             var uri =
                 (directive is ImportDirective) ? directive.uri.stringValue : '';
@@ -519,21 +519,25 @@
           continue;
         }
 
-        var library = await context.currentSession.getResolvedLibrary(path);
+        var resolvedLibrary = await context.currentSession.getResolvedLibrary(
+          path,
+        );
 
         if (isCancelled) {
           break;
         }
-        if (library is NotLibraryButPartResult) {
-          var unit = await context.currentSession.getResolvedUnit(path);
-          if (unit is ResolvedUnitResult) {
-            library = await context.currentSession.getResolvedLibraryByElement2(
-              unit.libraryElement2,
-            );
+        if (resolvedLibrary is NotLibraryButPartResult) {
+          var resolvedUnit = await context.currentSession.getResolvedUnit(path);
+          if (resolvedUnit is ResolvedUnitResult) {
+            resolvedLibrary = await context.currentSession
+                .getResolvedLibraryByElement2(resolvedUnit.libraryElement2);
           }
         }
-        if (library is ResolvedLibraryResult) {
-          await _fixErrorsInLibrary(library, stopAfterFirst: stopAfterFirst);
+        if (resolvedLibrary is ResolvedLibraryResult) {
+          await _fixErrorsInLibrary(
+            resolvedLibrary,
+            stopAfterFirst: stopAfterFirst,
+          );
           if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
             break;
           }
@@ -585,16 +589,16 @@
   }
 
   /// Uses the change [builder] to create fixes for the diagnostics in the
-  /// library associated with the analysis [result].
+  /// library associated with the analysis [libraryResult].
   Future<void> _fixErrorsInLibrary(
-    ResolvedLibraryResult result, {
+    ResolvedLibraryResult libraryResult, {
     bool stopAfterFirst = false,
     bool autoTriggered = false,
   }) async {
-    for (var unitResult in result.units) {
+    for (var unitResult in libraryResult.units) {
       await _fixErrorsInLibraryUnit(
+        libraryResult,
         unitResult,
-        result,
         stopAfterFirst: stopAfterFirst,
         autoTriggered: autoTriggered,
       );
@@ -602,21 +606,22 @@
   }
 
   /// Uses the change [builder] to create fixes for the diagnostics in
-  /// [unit].
+  /// [unitResult].
   Future<void> _fixErrorsInLibraryUnit(
-    ResolvedUnitResult unit,
-    ResolvedLibraryResult library, {
+    ResolvedLibraryResult libraryResult,
+    ResolvedUnitResult unitResult, {
     bool stopAfterFirst = false,
     bool autoTriggered = false,
   }) async {
-    var analysisOptions = unit.session.analysisContext
-        .getAnalysisOptionsForFile(unit.file);
+    var analysisOptions = unitResult.session.analysisContext
+        .getAnalysisOptionsForFile(unitResult.file);
 
     DartFixContext fixContext(AnalysisError diagnostic) {
       return DartFixContext(
         instrumentationService: _instrumentationService,
         workspace: _workspace,
-        resolvedResult: unit,
+        libraryResult: libraryResult,
+        unitResult: unitResult,
         error: diagnostic,
         autoTriggered: autoTriggered,
       );
@@ -624,10 +629,11 @@
 
     CorrectionProducerContext correctionContext(AnalysisError diagnostic) {
       return CorrectionProducerContext.createResolved(
+        libraryResult: libraryResult,
+        unitResult: unitResult,
         applyingBulkFixes: true,
         dartFixContext: fixContext(diagnostic),
         diagnostic: diagnostic,
-        resolvedResult: unit,
         selectionOffset: diagnostic.offset,
         selectionLength: diagnostic.length,
       );
@@ -636,9 +642,9 @@
     //
     // Attempt to apply the fixes that aren't related to directives.
     //
-    for (var error in _filterErrors(analysisOptions, unit.errors)) {
+    for (var error in _filterErrors(analysisOptions, unitResult.errors)) {
       var context = fixContext(error);
-      await _fixSingleError(context, unit, error);
+      await _fixSingleError(context, libraryResult, unitResult, error);
       if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
         return;
       }
@@ -646,15 +652,15 @@
 
     // Only if this unit is the defining unit, we don't have other fixes and
     // we were not auto-triggered should be continue with fixes for directives.
-    if (unit != library.units.first ||
+    if (unitResult != libraryResult.units.first ||
         autoTriggered ||
-        builder.hasEditsFor(unit.path)) {
+        builder.hasEditsFor(unitResult.path)) {
       return;
     }
 
     AnalysisError? directivesOrderingError;
     var unusedImportErrors = <AnalysisError>[];
-    for (var error in _filterErrors(analysisOptions, unit.errors)) {
+    for (var error in _filterErrors(analysisOptions, unitResult.errors)) {
       var errorCode = error.errorCode;
       if (errorCode is LintCode) {
         if (DirectivesOrdering.allCodes.contains(errorCode)) {
@@ -695,15 +701,15 @@
   }
 
   Future<void> _fixErrorsInParsedLibrary(
-    ParsedLibraryResult result,
+    ParsedLibraryResult parsedLibrary,
     List<AnalysisError> errors, {
     required bool stopAfterFirst,
   }) async {
-    for (var unitResult in result.units) {
-      var analysisOptions = result.session.analysisContext
+    for (var unitResult in parsedLibrary.units) {
+      var analysisOptions = parsedLibrary.session.analysisContext
           .getAnalysisOptionsForFile(unitResult.file);
       for (var error in _filterErrors(analysisOptions, errors)) {
-        await _fixSingleParseError(unitResult, error);
+        await _fixSingleParseError(parsedLibrary, unitResult, error);
         if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
           return;
         }
@@ -713,17 +719,19 @@
 
   /// Uses the change [builder] and the [fixContext] to create a fix for the
   /// given [diagnostic] in the compilation unit associated with the analysis
-  /// [result].
+  /// [unitResult].
   Future<void> _fixSingleError(
     DartFixContext fixContext,
-    ResolvedUnitResult result,
+    ResolvedLibraryResult libraryResult,
+    ResolvedUnitResult unitResult,
     AnalysisError diagnostic,
   ) async {
     var context = CorrectionProducerContext.createResolved(
+      libraryResult: libraryResult,
+      unitResult: unitResult,
       applyingBulkFixes: true,
       dartFixContext: fixContext,
       diagnostic: diagnostic,
-      resolvedResult: result,
       selectionOffset: diagnostic.offset,
       selectionLength: diagnostic.length,
     );
@@ -769,7 +777,7 @@
       }
     } catch (e, s) {
       throw CaughtException.withMessage(
-        'Exception generating fix for $codeName in ${result.path}',
+        'Exception generating fix for $codeName in ${unitResult.path}',
         e,
         s,
       );
@@ -777,15 +785,17 @@
   }
 
   /// Uses the change [builder] to create a fix for the given [diagnostic] in
-  /// the compilation unit associated with the analysis [result].
+  /// the compilation unit associated with the analysis [unitResult].
   Future<void> _fixSingleParseError(
-    ParsedUnitResult result,
+    ParsedLibraryResult libraryResult,
+    ParsedUnitResult unitResult,
     AnalysisError diagnostic,
   ) async {
     var context = CorrectionProducerContext.createParsed(
+      libraryResult: libraryResult,
+      unitResult: unitResult,
       applyingBulkFixes: true,
       diagnostic: diagnostic,
-      resolvedResult: result,
       selectionOffset: diagnostic.offset,
       selectionLength: diagnostic.length,
     );
@@ -803,7 +813,7 @@
       }
     } catch (e, s) {
       throw CaughtException.withMessage(
-        'Exception generating fix for $codeName in ${result.path}',
+        'Exception generating fix for $codeName in ${unitResult.path}',
         e,
         s,
       );
@@ -821,19 +831,19 @@
             file_paths.isMacroGenerated(path)) {
           continue;
         }
-        var result =
+        var unitResult =
             context.currentSession.getParsedUnit(path) as ParsedUnitResult;
-        if (result.errors.isNotEmpty) {
+        if (unitResult.errors.isNotEmpty) {
           continue;
         }
 
-        var formatResult = generateEditsForFormatting(result);
+        var formatResult = generateEditsForFormatting(unitResult);
         await formatResult.mapResult((formatResult) async {
           var edits = formatResult ?? [];
           if (edits.isNotEmpty) {
             await builder.addDartFileEdit(path, (builder) {
               for (var edit in edits) {
-                var lineInfo = result.lineInfo;
+                var lineInfo = unitResult.lineInfo;
                 var startOffset =
                     lineInfo.getOffsetOfLine(edit.range.start.line) +
                     edit.range.start.character;
@@ -895,10 +905,10 @@
             file_paths.isMacroGenerated(path)) {
           continue;
         }
-        var result =
+        var unitResult =
             context.currentSession.getParsedUnit(path) as ParsedUnitResult;
-        var code = result.content;
-        var errors = result.errors;
+        var code = unitResult.content;
+        var errors = unitResult.errors;
         // Check if there are scan/parse errors in the file.
         var hasParseErrors = errors.any(
           (error) =>
@@ -909,7 +919,7 @@
           // Cannot process files with parse errors.
           continue;
         }
-        var sorter = ImportOrganizer(code, result.unit, errors);
+        var sorter = ImportOrganizer(code, unitResult.unit, errors);
         var edits = sorter.organize();
         await builder.addDartFileEdit(path, (builder) {
           for (var edit in edits) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart
index 12ca656..f8b9976 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_extension_override.dart
@@ -24,7 +24,7 @@
     var dartFixContext = context.dartFixContext;
     if (dartFixContext == null) return const [];
 
-    var libraryFragment = dartFixContext.resolvedResult.unit.declaredElement!;
+    var libraryFragment = dartFixContext.unitResult.unit.declaredElement!;
     var libraryElement = libraryFragment.library;
 
     var nodeName = Name(libraryElement.source.uri, node.name);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart
index b5f9d1b..2afb153 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_related_to_cascade.dart
@@ -13,9 +13,7 @@
 import 'package:linter/src/lint_names.dart';
 
 class ConvertRelatedToCascade extends ResolvedCorrectionProducer {
-  final CorrectionProducerContext _context;
-
-  ConvertRelatedToCascade({required super.context}) : _context = context;
+  ConvertRelatedToCascade({required super.context});
 
   @override
   CorrectionApplicability get applicability =>
@@ -34,13 +32,13 @@
     var block = node.parent;
     if (block is! Block) return;
 
-    var errors = _context.dartFixContext?.resolvedResult.errors
+    var errors = unitResult.errors
         .where((error) => error.errorCode.name == LintNames.cascade_invocations)
         .whereNot(
           (error) => error.offset == node.offset && error.length == node.length,
         );
 
-    if (errors == null || errors.isEmpty) return;
+    if (errors.isEmpty) return;
 
     var previous = _getPrevious(block, node);
     var next = _getNext(block, node);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
index b74c4f1..9fa65bd 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/import_library.dart
@@ -375,7 +375,7 @@
     }
 
     var name = Name(
-      dartFixContext.resolvedResult.libraryElement.source.uri,
+      dartFixContext.unitResult.libraryElement.source.uri,
       memberName,
     );
     var producers = <ResolvedCorrectionProducer>[];
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart b/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart
index 86eb9d1..97fd349 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/use_different_division_operator.dart
@@ -63,10 +63,11 @@
 class _UseDifferentDivisionOperator extends ResolvedCorrectionProducer {
   @override
   final FixKind fixKind;
-  final CorrectionProducerContext _context;
 
-  _UseDifferentDivisionOperator({required super.context, required this.fixKind})
-    : _context = context;
+  _UseDifferentDivisionOperator({
+    required super.context,
+    required this.fixKind,
+  });
 
   @override
   CorrectionApplicability get applicability =>
@@ -102,23 +103,17 @@
     }
     // All extensions available in the current scope for the left operand that
     // define the other division operator.
-    var name = Name(
-      _context.dartFixContext!.resolvedResult.libraryElement.source.uri,
-      otherOperator.lexeme,
-    );
+    var name = Name(unitResult.libraryElement.source.uri, otherOperator.lexeme);
     var hasNoExtensionWithOtherDivisionOperator =
-        await _context.dartFixContext!
-            .librariesWithExtensions(otherOperator.lexeme)
-            .where((library) {
-              return library.exportedExtensions
-                  .havingMemberWithBaseName(name)
-                  .applicableTo(
-                    targetLibrary: libraryElement,
-                    targetType: leftType!,
-                  )
-                  .isNotEmpty;
-            })
-            .isEmpty;
+        await librariesWithExtensions(otherOperator.lexeme).where((library) {
+          return library.exportedExtensions
+              .havingMemberWithBaseName(name)
+              .applicableTo(
+                targetLibrary: libraryElement,
+                targetType: leftType!,
+              )
+              .isNotEmpty;
+        }).isEmpty;
     if (hasNoExtensionWithOtherDivisionOperator && operators.isEmpty) {
       return;
     }
diff --git a/pkg/analysis_server/test/abstract_single_unit.dart b/pkg/analysis_server/test/abstract_single_unit.dart
index 7299977..5efb1de 100644
--- a/pkg/analysis_server/test/abstract_single_unit.dart
+++ b/pkg/analysis_server/test/abstract_single_unit.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:analyzer/src/test_utilities/find_element2.dart';
 import 'package:analyzer/src/test_utilities/find_node.dart';
+import 'package:analyzer/src/utilities/extensions/analysis_session.dart';
 import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:test/test.dart';
 
@@ -22,6 +23,7 @@
 
   late String testCode;
   late ParsedUnitResult testParsedResult;
+  late ResolvedLibraryResult? testLibraryResult;
   late ResolvedUnitResult testAnalysisResult;
   late CompilationUnit testUnit;
   late CompilationUnitElement testUnitElement;
@@ -50,25 +52,28 @@
 
   @override
   Future<ParsedUnitResult> getParsedUnit(File file) async {
-    var result = await super.getParsedUnit(file);
-    testParsedResult = result;
-    testCode = result.content;
-    testUnit = result.unit;
+    var unitResult = await super.getParsedUnit(file);
+    testParsedResult = unitResult;
+    testCode = unitResult.content;
+    testUnit = unitResult.unit;
     findNode = FindNode(testCode, testUnit);
     findElement = FindElement(testUnit);
     findElement2 = FindElement2(testUnit);
-    return result;
+    return unitResult;
   }
 
   @override
   Future<ResolvedUnitResult> getResolvedUnit(File file) async {
-    var result = await super.getResolvedUnit(file);
-    testAnalysisResult = result;
-    testCode = result.content;
-    testUnit = result.unit;
+    var session = await this.session;
+    testLibraryResult = await session.getResolvedContainingLibrary(file.path);
+    var unitResult = testLibraryResult?.unitWithPath(file.path);
+    unitResult ??= await super.getResolvedUnit(file);
+    testAnalysisResult = unitResult;
+    testCode = testAnalysisResult.content;
+    testUnit = testAnalysisResult.unit;
     if (verifyNoTestUnitErrors) {
       expect(
-        result.errors.where((AnalysisError error) {
+        testAnalysisResult.errors.where((AnalysisError error) {
           return error.errorCode != WarningCode.DEAD_CODE &&
               error.errorCode != WarningCode.UNUSED_CATCH_CLAUSE &&
               error.errorCode != WarningCode.UNUSED_CATCH_STACK &&
@@ -85,7 +90,7 @@
     findNode = FindNode(testCode, testUnit);
     findElement = FindElement(testUnit);
     findElement2 = FindElement2(testUnit);
-    return result;
+    return testAnalysisResult;
   }
 
   Future<void> parseTestCode(String code) async {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
index c292eee..0d541da 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
@@ -211,9 +211,14 @@
   }
 
   Future<List<Assist>> _computeAssists() async {
+    var libraryResult = testLibraryResult;
+    if (libraryResult == null) {
+      return const [];
+    }
     var context = DartAssistContextImpl(
       TestInstrumentationService(),
       await workspace,
+      libraryResult,
       testAnalysisResult,
       _producerGeneratorsForLintRules,
       _offset,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index bb1dbc2..990c844 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -258,10 +258,15 @@
 
   /// Computes fixes for the given [error] in [testUnit].
   Future<List<Fix>> _computeFixes(AnalysisError error) async {
+    var libraryResult = testLibraryResult;
+    if (libraryResult == null) {
+      return const [];
+    }
     var context = DartFixContext(
       instrumentationService: TestInstrumentationService(),
       workspace: await workspace,
-      resolvedResult: testAnalysisResult,
+      libraryResult: libraryResult,
+      unitResult: testAnalysisResult,
       error: error,
     );
 
@@ -584,10 +589,15 @@
 
   /// Computes fixes for the given [error] in [testUnit].
   Future<List<Fix>> _computeFixes(AnalysisError error) async {
+    var libraryResult = testLibraryResult;
+    if (libraryResult == null) {
+      return const [];
+    }
     var context = DartFixContext(
       instrumentationService: TestInstrumentationService(),
       workspace: await workspace,
-      resolvedResult: testAnalysisResult,
+      libraryResult: libraryResult,
+      unitResult: testAnalysisResult,
       error: error,
     );
     return await computeFixes(context);
diff --git a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
index dfdac9f..27c213d 100644
--- a/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
+++ b/pkg/analysis_server_plugin/lib/edit/dart/correction_producer.dart
@@ -207,6 +207,7 @@
   final CorrectionUtils _utils;
 
   final AnalysisSessionHelper _sessionHelper;
+  final ParsedLibraryResult _libraryResult;
   final ParsedUnitResult _unitResult;
 
   final DartFixContext? dartFixContext;
@@ -222,6 +223,7 @@
   final Token _token;
 
   CorrectionProducerContext._({
+    required ParsedLibraryResult libraryResult,
     required ParsedUnitResult unitResult,
     required bool applyingBulkFixes,
     required this.dartFixContext,
@@ -230,7 +232,8 @@
     required Token token,
     required int selectionOffset,
     required int selectionLength,
-  })  : _unitResult = unitResult,
+  })  : _libraryResult = libraryResult,
+        _unitResult = unitResult,
         _sessionHelper = AnalysisSessionHelper(unitResult.session),
         _utils = CorrectionUtils(unitResult),
         _applyingBulkFixes = applyingBulkFixes,
@@ -244,24 +247,26 @@
   int get _selectionEnd => _selectionOffset + _selectionLength;
 
   static CorrectionProducerContext createParsed({
-    required ParsedUnitResult resolvedResult,
+    required ParsedLibraryResult libraryResult,
+    required ParsedUnitResult unitResult,
     bool applyingBulkFixes = false,
     DartFixContext? dartFixContext,
     Diagnostic? diagnostic,
     int selectionOffset = -1,
     int selectionLength = 0,
   }) {
-    var selection = resolvedResult.unit.select(
+    var selection = unitResult.unit.select(
       offset: selectionOffset,
       length: selectionLength,
     );
     var node = selection?.coveringNode;
-    node ??= resolvedResult.unit;
+    node ??= unitResult.unit;
 
     var token = _tokenAt(node, selectionOffset) ?? node.beginToken;
 
     return CorrectionProducerContext._(
-      unitResult: resolvedResult,
+      libraryResult: libraryResult,
+      unitResult: unitResult,
       node: node,
       token: token,
       applyingBulkFixes: applyingBulkFixes,
@@ -273,7 +278,8 @@
   }
 
   static CorrectionProducerContext createResolved({
-    required ResolvedUnitResult resolvedResult,
+    required ResolvedLibraryResult libraryResult,
+    required ResolvedUnitResult unitResult,
     bool applyingBulkFixes = false,
     DartFixContext? dartFixContext,
     Diagnostic? diagnostic,
@@ -282,13 +288,14 @@
   }) {
     var selectionEnd = selectionOffset + selectionLength;
     var locator = NodeLocator(selectionOffset, selectionEnd);
-    var node = locator.searchWithin(resolvedResult.unit);
-    node ??= resolvedResult.unit;
+    var node = locator.searchWithin(unitResult.unit);
+    node ??= unitResult.unit;
 
     var token = _tokenAt(node, selectionOffset) ?? node.beginToken;
 
     return CorrectionProducerContext._(
-      unitResult: resolvedResult,
+      libraryResult: libraryResult,
+      unitResult: unitResult,
       node: node,
       token: token,
       applyingBulkFixes: applyingBulkFixes,
@@ -336,6 +343,10 @@
   /// produced.
   LibraryElement get libraryElement => unitResult.libraryElement;
 
+  @override
+  ResolvedLibraryResult get libraryResult =>
+      super.libraryResult as ResolvedLibraryResult;
+
   /// The individual producers generated by this producer.
   Future<List<ResolvedCorrectionProducer>> get producers;
 
@@ -387,6 +398,10 @@
   /// produced.
   LibraryElement2 get libraryElement2 => unitResult.libraryElement2;
 
+  @override
+  ResolvedLibraryResult get libraryResult =>
+      super.libraryResult as ResolvedLibraryResult;
+
   TypeProvider get typeProvider => unitResult.typeProvider;
 
   /// The type system appropriate to the library in which the correction is
@@ -697,6 +712,8 @@
 
   String get file => _context.path;
 
+  ParsedLibraryResult get libraryResult => _context._libraryResult;
+
   AstNode get node => _context.node;
 
   ResourceProvider get resourceProvider => unitResult.session.resourceProvider;
diff --git a/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart b/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart
index 07ff6b5..5e6347c 100644
--- a/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart
+++ b/pkg/analysis_server_plugin/lib/edit/fix/dart_fix_context.dart
@@ -30,8 +30,11 @@
   /// being composed.
   final InstrumentationService instrumentationService;
 
-  /// The resolution result in which the fix operates.
-  final ResolvedUnitResult resolvedResult;
+  /// The library result in which the fix operates.
+  final ResolvedLibraryResult libraryResult;
+
+  /// The unit result in which the fix operates.
+  final ResolvedUnitResult unitResult;
 
   /// The workspace in which the fix contributor operates.
   final ChangeWorkspace workspace;
@@ -42,7 +45,8 @@
   DartFixContext({
     required this.instrumentationService,
     required this.workspace,
-    required this.resolvedResult,
+    required this.libraryResult,
+    required this.unitResult,
     required this.error,
     this.autoTriggered = false,
   });
@@ -54,20 +58,20 @@
   /// For getters and setters the corresponding top-level variable is returned.
   Future<Map<LibraryElement, Element>> getTopLevelDeclarations(
       String name) async {
-    return TopLevelDeclarations(resolvedResult).withName(name);
+    return TopLevelDeclarations(unitResult).withName(name);
   }
 
   /// Returns libraries with extensions that declare non-static public
   /// extension members with the [memberName].
   // TODO(srawlins): The documentation above is wrong; `memberName` is unused.
   Stream<LibraryElement> librariesWithExtensions(String memberName) async* {
-    var analysisContext = resolvedResult.session.analysisContext;
+    var analysisContext = unitResult.session.analysisContext;
     var analysisDriver = (analysisContext as DriverBasedAnalysisContext).driver;
     await analysisDriver.discoverAvailableFiles();
 
     var fsState = analysisDriver.fsState;
     var filter = FileStateFilter(
-      fsState.getFileForPath(resolvedResult.path),
+      fsState.getFileForPath(unitResult.path),
     );
 
     for (var file in fsState.knownFiles.toList()) {
@@ -88,13 +92,13 @@
   /// extension members with the [memberName].
   // TODO(srawlins): The documentation above is wrong; `memberName` is unused.
   Stream<LibraryElement2> librariesWithExtensions2(String memberName) async* {
-    var analysisContext = resolvedResult.session.analysisContext;
+    var analysisContext = unitResult.session.analysisContext;
     var analysisDriver = (analysisContext as DriverBasedAnalysisContext).driver;
     await analysisDriver.discoverAvailableFiles();
 
     var fsState = analysisDriver.fsState;
     var filter = FileStateFilter(
-      fsState.getFileForPath(resolvedResult.path),
+      fsState.getFileForPath(unitResult.path),
     );
 
     for (var file in fsState.knownFiles.toList()) {
diff --git a/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart b/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart
index 2a5fbbe..142546e 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/fix_in_file_processor.dart
@@ -20,7 +20,7 @@
 
   Future<List<Fix>> compute() async {
     var error = _fixContext.error;
-    var errors = _fixContext.resolvedResult.errors
+    var errors = _fixContext.unitResult.errors
         .where((e) => error.errorCode.name == e.errorCode.name);
     if (errors.length < 2) {
       return const <Fix>[];
@@ -41,7 +41,8 @@
         var fixContext = DartFixContext(
           instrumentationService: _fixContext.instrumentationService,
           workspace: _fixContext.workspace,
-          resolvedResult: _fixContext.resolvedResult,
+          libraryResult: _fixContext.libraryResult,
+          unitResult: _fixContext.unitResult,
           error: error,
         );
         fixState = await _fixError(fixContext, fixState, generator, error);
@@ -56,7 +57,8 @@
           var fixContext = DartFixContext(
             instrumentationService: _fixContext.instrumentationService,
             workspace: _fixContext.workspace,
-            resolvedResult: _fixContext.resolvedResult,
+            libraryResult: _fixContext.libraryResult,
+            unitResult: _fixContext.unitResult,
             error: error,
           );
           fixState = await _fixError(fixContext, fixState, generator, error);
@@ -85,7 +87,8 @@
       applyingBulkFixes: true,
       dartFixContext: fixContext,
       diagnostic: diagnostic,
-      resolvedResult: fixContext.resolvedResult,
+      libraryResult: fixContext.libraryResult,
+      unitResult: fixContext.unitResult,
       selectionOffset: diagnostic.offset,
       selectionLength: diagnostic.length,
     );
diff --git a/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart b/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
index 2a20898..4906559 100644
--- a/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
+++ b/pkg/analysis_server_plugin/lib/src/correction/fix_processor.dart
@@ -29,7 +29,7 @@
   FixProcessor(this._fixContext);
 
   Future<List<Fix>> compute() async {
-    if (isMacroGenerated(_fixContext.resolvedResult.file.path)) {
+    if (isMacroGenerated(_fixContext.unitResult.file.path)) {
       return _fixes;
     }
     await _addFromProducers();
@@ -55,9 +55,10 @@
   Future<void> _addFromProducers() async {
     var error = _fixContext.error;
     var context = CorrectionProducerContext.createResolved(
+      libraryResult: _fixContext.libraryResult,
+      unitResult: _fixContext.unitResult,
       dartFixContext: _fixContext,
       diagnostic: error,
-      resolvedResult: _fixContext.resolvedResult,
       selectionOffset: _fixContext.error.offset,
       selectionLength: _fixContext.error.length,
     );
diff --git a/pkg/analysis_server_plugin/lib/src/plugin_server.dart b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
index 1a8bf75..77ad2ac 100644
--- a/pkg/analysis_server_plugin/lib/src/plugin_server.dart
+++ b/pkg/analysis_server_plugin/lib/src/plugin_server.dart
@@ -116,8 +116,8 @@
     if (libraryResult is! ResolvedLibraryResult) {
       return protocol.EditGetFixesResult(const []);
     }
-    var result = await analysisContext.currentSession.getResolvedUnit(path);
-    if (result is! ResolvedUnitResult) {
+    var unitResult = libraryResult.unitWithPath(path);
+    if (unitResult is! ResolvedUnitResult) {
       return protocol.EditGetFixesResult(const []);
     }
 
@@ -133,7 +133,8 @@
         // implementations get InstrumentationService from AnalysisServer.
         instrumentationService: InstrumentationService.NULL_SERVICE,
         workspace: workspace,
-        resolvedResult: result,
+        libraryResult: libraryResult,
+        unitResult: unitResult,
         error: error,
       );
 
@@ -256,27 +257,27 @@
     if (libraryResult is! ResolvedLibraryResult) {
       return [];
     }
-    var result = await analysisContext.currentSession.getResolvedUnit(path);
-    if (result is! ResolvedUnitResult) {
+    var unitResult = await analysisContext.currentSession.getResolvedUnit(path);
+    if (unitResult is! ResolvedUnitResult) {
       return [];
     }
     var listener = RecordingErrorListener();
-    var errorReporter =
-        ErrorReporter(listener, result.libraryElement2.firstFragment.source);
+    var errorReporter = ErrorReporter(
+        listener, unitResult.libraryElement2.firstFragment.source);
 
     var currentUnit = LintRuleUnitContext(
-      file: result.file,
-      content: result.content,
+      file: unitResult.file,
+      content: unitResult.content,
       errorReporter: errorReporter,
-      unit: result.unit,
+      unit: unitResult.unit,
     );
     var allUnits = [
-      for (var unit in libraryResult.units)
+      for (var unitResult in libraryResult.units)
         LintRuleUnitContext(
-          file: unit.file,
-          content: unit.content,
+          file: unitResult.file,
+          content: unitResult.content,
           errorReporter: errorReporter,
-          unit: unit.unit,
+          unit: unitResult.unit,
         ),
     ];