Parts. Deprecate LibraryElement.libraryImports

Change-Id: I9e3455fda9943123cc0aa0d95617f532bcec670f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/388440
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index caf7adc..ce0fd14 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/src/dart/analysis/results.dart';
 import 'package:analyzer/src/dart/micro/resolve_file.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
 import 'package:meta/meta.dart';
 
 /// The cache that can be reuse for across multiple completion request.
@@ -171,7 +172,12 @@
     required OperationPerformanceImpl performance,
   }) {
     var suggestionBuilders = <CompletionSuggestionBuilder>[];
-    for (var importedLibrary in target.importedLibraries) {
+    var importedLibraries = target.withEnclosing
+        .expand((fragment) => fragment.libraryImports)
+        .map((import) => import.importedLibrary)
+        .nonNulls
+        .toSet();
+    for (var importedLibrary in importedLibraries) {
       var importedSuggestions = _importedLibrarySuggestions(
         element: importedLibrary,
         performance: performance,
@@ -263,23 +269,3 @@
 
   _CiderImportedLibrarySuggestions(this.signature, this.suggestionBuilders);
 }
-
-extension on CompilationUnitElement {
-  Set<LibraryElement> get importedLibraries {
-    var result = <LibraryElement>{};
-    var current = this;
-    while (true) {
-      result.addAll(
-        current.libraryImports
-            .map((libraryImport) => libraryImport.importedLibrary)
-            .nonNulls,
-      );
-      if (current.enclosingElement3 case var enclosing?) {
-        current = enclosing;
-      } else {
-        break;
-      }
-    }
-    return result;
-  }
-}
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 4da587a..e44230e 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -217,7 +217,7 @@
       }
     } else if (element is LibraryImportElement) {
       var unit = (await canRename._fileResolver.resolve(path: sourcePath)).unit;
-      var index = element.library.libraryImports.indexOf(element);
+      var index = element.enclosingElement3.libraryImports.indexOf(element);
       var node = unit.directives.whereType<ImportDirective>().elementAt(index);
       var prefixNode = node.prefix;
       if (newName.isEmpty) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart b/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart
index 2b41367..3540e78 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/declaration_helper.dart
@@ -300,7 +300,7 @@
 
   void addImportPrefixes() {
     var library = request.libraryElement;
-    for (var element in library.libraryImports) {
+    for (var element in library.definingCompilationUnit.libraryImports) {
       var importPrefix = element.prefix;
       if (importPrefix == null) {
         continue;
@@ -824,7 +824,7 @@
     // TODO(brianwilkerson): This will create suggestions for elements that
     //  conflict with different elements imported from a different library. Not
     //  sure whether that's the desired behavior.
-    for (var importElement in library.libraryImports) {
+    for (var importElement in library.definingCompilationUnit.libraryImports) {
       var importedLibrary = importElement.importedLibrary;
       if (importedLibrary != null) {
         _addConstructorsImportedFrom(
@@ -842,7 +842,7 @@
     // TODO(brianwilkerson): This will create suggestions for elements that
     //  conflict with different elements imported from a different library. Not
     //  sure whether that's the desired behavior.
-    for (var importElement in library.libraryImports) {
+    for (var importElement in library.definingCompilationUnit.libraryImports) {
       var importedLibrary = importElement.importedLibrary;
       if (importedLibrary != null) {
         _addDeclarationsImportedFrom(
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/not_imported_completion_pass.dart b/pkg/analysis_server/lib/src/services/completion/dart/not_imported_completion_pass.dart
index 524b5b6..9718695 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/not_imported_completion_pass.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/not_imported_completion_pass.dart
@@ -213,7 +213,7 @@
   Set<LibraryElement> importedLibraries = Set<LibraryElement>.identity();
 
   _ImportSummary(LibraryElement library) {
-    for (var import in library.libraryImports) {
+    for (var import in library.definingCompilationUnit.libraryImports) {
       var importedLibrary = import.importedLibrary;
       if (importedLibrary != null) {
         if (import.combinators.isEmpty) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index c02e7f6..604e0b5 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -130,7 +130,8 @@
         }
       }
       // Check elements from imports.
-      for (var importElement in unitResult.libraryElement.libraryImports) {
+      for (var importElement
+          in unitResult.libraryElement.definingCompilationUnit.libraryImports) {
         if (importElement.prefix?.element.name == prefixName) {
           var namespace = getImportNamespace(importElement);
           finder._updateList(namespace.values);
@@ -230,7 +231,8 @@
         }
       }
       // Check unprefixed imports.
-      for (var importElement in unitResult.libraryElement.libraryImports) {
+      for (var importElement
+          in unitResult.libraryElement.definingCompilationUnit.libraryImports) {
         if (importElement.prefix?.element.name == prefixName) {
           var namespace = getImportNamespace(importElement);
           finder._updateList(namespace.values);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
index a22d28b..9ebd3a4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_mixin.dart
@@ -82,7 +82,8 @@
       filePath = file;
       prefix = '$eol$eol';
     } else {
-      for (var import in libraryElement.libraryImports) {
+      for (var import
+          in libraryElement.definingCompilationUnit.libraryImports) {
         if (prefixElement is PrefixElement &&
             import.prefix?.element == prefixElement) {
           var library = import.importedLibrary;
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 b2daece..35465a4 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
@@ -82,7 +82,7 @@
     // additional analysis.
     var foundImport = false;
     var producers = <ResolvedCorrectionProducer>[];
-    for (var import in libraryElement.libraryImports) {
+    for (var import in libraryElement.definingCompilationUnit.libraryImports) {
       // prepare element
       var importedLibrary = import.importedLibrary;
       if (importedLibrary == null || importedLibrary != libraryToImport) {
@@ -169,7 +169,7 @@
     // Maybe there is an existing import, but it is with prefix and we don't use
     // this prefix.
     var alreadyImportedWithPrefix = <LibraryElement>{};
-    for (var import in libraryElement.libraryImports) {
+    for (var import in libraryElement.definingCompilationUnit.libraryImports) {
       // Prepare the element.
       var libraryElement = import.importedLibrary;
       if (libraryElement == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
index 094e6cc..9b23c78 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
@@ -162,7 +162,7 @@
     if (library == null) {
       return null;
     }
-    for (var importElement in library.libraryImports) {
+    for (var importElement in library.definingCompilationUnit.libraryImports) {
       // TODO(brianwilkerson): Filter based on combinators to help avoid making
       //  invalid suggestions.
       var uri = importElement.importedLibrary?.source.uri;
diff --git a/pkg/analysis_server/lib/src/services/correction/namespace.dart b/pkg/analysis_server/lib/src/services/correction/namespace.dart
index 1c6dd12..c55ff49 100644
--- a/pkg/analysis_server/lib/src/services/correction/namespace.dart
+++ b/pkg/analysis_server/lib/src/services/correction/namespace.dart
@@ -44,7 +44,8 @@
   var usedLibrary = element.library;
   // find ImportElement that imports used library with used prefix
   List<LibraryImportElement>? candidates;
-  for (var importElement in libraryElement.libraryImports) {
+  for (var importElement
+      in libraryElement.definingCompilationUnit.libraryImports) {
     // required library
     if (importElement.importedLibrary != usedLibrary) {
       continue;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
index daae91b..d4ad8af 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
@@ -1783,7 +1783,7 @@
   ///
   /// May be `null` if was not imported, i.e. declared in the same library.
   LibraryImportElement? _getImportElement(Element element) {
-    for (var imp in library.libraryImports) {
+    for (var imp in library.definingCompilationUnit.libraryImports) {
       var definedNames = getImportNamespace(imp);
       if (definedNames.containsValue(element)) {
         return imp;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart
index b903678..ae2ab40 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_import.dart
@@ -103,7 +103,7 @@
       return null;
     }
     var unit = unitResult.unit;
-    var index = library.libraryImports.indexOf(element);
+    var index = library.definingCompilationUnit.libraryImports.indexOf(element);
     return unit.directives.whereType<ImportDirective>().elementAt(index);
   }
 
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
index 2a1dca7..46dc9e3 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
@@ -195,7 +195,8 @@
       return true;
     }
     // check imports
-    for (var importElement in atLibrary.libraryImports) {
+    for (var importElement
+        in atLibrary.definingCompilationUnit.libraryImports) {
       // ignore if imported with prefix
       if (importElement.prefix != null) {
         continue;
diff --git a/pkg/analysis_server/lib/src/utilities/import_analyzer.dart b/pkg/analysis_server/lib/src/utilities/import_analyzer.dart
index af58b3a..f4e7502 100644
--- a/pkg/analysis_server/lib/src/utilities/import_analyzer.dart
+++ b/pkg/analysis_server/lib/src/utilities/import_analyzer.dart
@@ -161,7 +161,8 @@
 
   /// Initialize a newly created finder to send information to the [recorder].
   _ReferenceFinder(this.unit, this.recorder) {
-    for (var import in unit.libraryElement.libraryImports) {
+    for (var import
+        in unit.libraryElement.definingCompilationUnit.libraryImports) {
       _importsByPrefix
           .putIfAbsent(import.prefix?.element.name ?? '', () => {})
           .add(import);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 32e1340..4f04e94 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -6,6 +6,8 @@
 * Deprecated `LibraryElement.isBrowserApplication`.
 * Deprecated `LibraryElement.libraryExports`,
   use `CompilationUnitElement.libraryExports` instead.
+* Deprecated `LibraryElement.libraryImports`,
+  use `CompilationUnitElement.libraryImports` instead.
 
 ## 6.9.0
 * `NormalFormalParameter` now implements `AnnotatedNode`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 48348cc..eb9c6e5 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -2009,6 +2009,9 @@
   /// the order in which they were specified.
   List<NamespaceCombinator> get combinators;
 
+  @override
+  CompilationUnitElement get enclosingElement3;
+
   /// The [LibraryElement], if [uri] is a [DirectiveUriWithLibrary].
   LibraryElement? get importedLibrary;
 
@@ -2077,6 +2080,7 @@
   List<LibraryExportElement> get libraryExports;
 
   /// The imports defined in this library.
+  @Deprecated('Use CompilationUnitElement.libraryImports')
   List<LibraryImportElement> get libraryImports;
 
   /// The prefixes used to `import` libraries into this library.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 6c40b13..c5314f4 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -6280,6 +6280,11 @@
   }) : super(null, importKeywordOffset);
 
   @override
+  CompilationUnitElementImpl get enclosingElement3 {
+    return super.enclosingElement3 as CompilationUnitElementImpl;
+  }
+
+  @override
   int get hashCode => identityHashCode(this);
 
   @override
@@ -6350,6 +6355,7 @@
         definingCompilationUnit,
         // ignore:deprecated_member_use_from_same_package
         ...libraryExports,
+        // ignore:deprecated_member_use_from_same_package
         ...libraryImports,
       ];
 
@@ -6382,6 +6388,7 @@
     return definingCompilationUnit.libraryExports;
   }
 
+  @Deprecated('Use CompilationUnitElement.libraryImports')
   @override
   List<LibraryImportElementImpl> get libraryImports {
     return definingCompilationUnit.libraryImports;
diff --git a/pkg/analyzer/lib/src/dart/micro/utils.dart b/pkg/analyzer/lib/src/dart/micro/utils.dart
index 3977c01..d436dec 100644
--- a/pkg/analyzer/lib/src/dart/micro/utils.dart
+++ b/pkg/analyzer/lib/src/dart/micro/utils.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/element_locator.dart';
 import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
 
 /// Return the [Element] of the given [node], or `null` if [node] is `null` or
 /// does not have an element.
@@ -68,7 +69,7 @@
 /// [element] - the referenced element.
 /// [importElementsMap] - the cache of [Element]s imported by [LibraryImportElement]s.
 LibraryImportElement? _getImportElement(
-    LibraryElement libraryElement,
+    CompilationUnitElementImpl libraryFragment,
     String prefix,
     Element element,
     Map<LibraryImportElement, Set<Element>> importElementsMap) {
@@ -78,7 +79,10 @@
   var usedLibrary = element.library;
   // find ImportElement that imports used library with used prefix
   List<LibraryImportElement>? candidates;
-  for (var importElement in libraryElement.libraryImports) {
+  var libraryImports = libraryFragment.withEnclosing
+      .expand((fragment) => fragment.libraryImports)
+      .toList();
+  for (var importElement in libraryImports) {
     // required library
     if (importElement.importedLibrary != usedLibrary) {
       continue;
@@ -134,8 +138,8 @@
   // prepare environment
   var parent = prefixNode.parent;
   var unit = prefixNode.thisOrAncestorOfType<CompilationUnit>();
-  var libraryElement = unit?.declaredElement?.library;
-  if (libraryElement == null) {
+  var libraryFragment = unit?.declaredElement as CompilationUnitElementImpl?;
+  if (libraryFragment == null) {
     return null;
   }
   // prepare used element
@@ -159,7 +163,7 @@
   var prefix = prefixNode.name;
   var importElementsMap = <LibraryImportElement, Set<Element>>{};
   return _getImportElement(
-      libraryElement, prefix, usedElement, importElementsMap);
+      libraryFragment, prefix, usedElement, importElementsMap);
 }
 
 class MatchInfo {
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index e31fcfe..12060a5 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -6287,7 +6287,9 @@
     if (name == null) {
       return '';
     }
-    var imports = _currentLibrary.libraryImports;
+    var imports = _currentUnit.withEnclosing
+        .expand((fragment) => fragment.libraryImports)
+        .toList();
     int count = imports.length;
     for (int i = 0; i < count; i++) {
       if (identical(imports[i].importedLibrary, library)) {
diff --git a/pkg/analyzer/lib/src/summary2/macro_declarations.dart b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
index 75a992c..3c31dbe 100644
--- a/pkg/analyzer/lib/src/summary2/macro_declarations.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
@@ -420,7 +420,8 @@
     annotation as ElementAnnotationImpl;
     var node = annotation.annotationAst;
 
-    var importPrefixNames = annotation.library.libraryImports
+    var importPrefixNames = annotation.compilationUnit.withEnclosing
+        .expand((fragment) => fragment.libraryImports)
         .map((e) => e.prefix?.element.name)
         .nonNulls
         .toSet();
diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart
index 21a424a..3506aa3 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_element.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/test_utilities/function_ast_visitor.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
 
 /// Helper for finding elements declared in the resolved [unit].
 class FindElement extends _FindElementBase {
@@ -52,13 +53,15 @@
   LibraryImportElement import(String targetUri, {bool mustBeUnique = true}) {
     LibraryImportElement? importElement;
 
-    for (var import in libraryElement.libraryImports) {
-      var importedUri = import.importedLibrary?.source.uri.toString();
-      if (importedUri == targetUri) {
-        if (importElement == null) {
-          importElement = import;
-        } else if (mustBeUnique) {
-          throw StateError('Not unique: $targetUri');
+    for (var libraryFragment in unitElement.withEnclosing) {
+      for (var import in libraryFragment.libraryImports) {
+        var importedUri = import.importedLibrary?.source.uri.toString();
+        if (importedUri == targetUri) {
+          if (importElement == null) {
+            importElement = import;
+          } else if (mustBeUnique) {
+            throw StateError('Not unique: $targetUri');
+          }
         }
       }
     }
@@ -244,10 +247,12 @@
   }
 
   PrefixElement prefix(String name) {
-    for (var import_ in libraryElement.libraryImports) {
-      var prefix = import_.prefix?.element;
-      if (prefix != null && prefix.name == name) {
-        return prefix;
+    for (var libraryFragment in unitElement.withEnclosing) {
+      for (var import_ in libraryFragment.libraryImports) {
+        var prefix = import_.prefix?.element;
+        if (prefix != null && prefix.name == name) {
+          return prefix;
+        }
       }
     }
     throw StateError('Not found: $name');
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 6afa468..949eb23 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -2649,6 +2649,7 @@
     _writeSinceSdkVersion(e);
 
     if (configuration.withImports) {
+      // ignore:deprecated_member_use_from_same_package
       var imports = e.libraryImports.where((import) {
         return configuration.withSyntheticDartCoreImport || !import.isSynthetic;
       }).toList();
diff --git a/pkg/analyzer/test/src/summary/elements/library_import_test.dart b/pkg/analyzer/test/src/summary/elements/library_import_test.dart
index b7a42d9..81e9161 100644
--- a/pkg/analyzer/test/src/summary/elements/library_import_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/library_import_test.dart
@@ -628,7 +628,7 @@
     var library = await buildLibrary('''
 import "dart:math" hide e, pi;
 ''');
-    var import = library.libraryImports[0];
+    var import = library.definingCompilationUnit.libraryImports[0];
     var combinator = import.combinators[0] as HideElementCombinator;
     expect(combinator.offset, 19);
     expect(combinator.end, 29);
@@ -801,7 +801,8 @@
     newFile('$testPackageLibPath/a.dart', 'library a; class C {}');
     var library = await buildLibrary('import "a.dart" as a; a.C c;');
 
-    var prefixElement = library.libraryImports[0].prefix!.element;
+    var prefixElement =
+        library.definingCompilationUnit.libraryImports[0].prefix!.element;
     expect(prefixElement.nameOffset, 19);
 
     checkElementText(library, r'''
@@ -894,10 +895,10 @@
 class C {}
 class D extends p.C {} // Prevent "unused import" warning
 ''');
-    expect(library.libraryImports, hasLength(2));
-    expect(
-        library.libraryImports[0].importedLibrary!.location, library.location);
-    expect(library.libraryImports[1].importedLibrary!.isDartCore, true);
+    var libraryImports = library.definingCompilationUnit.libraryImports;
+    expect(libraryImports, hasLength(2));
+    expect(libraryImports[0].importedLibrary!.location, library.location);
+    expect(libraryImports[1].importedLibrary!.isDartCore, true);
     checkElementText(library, r'''
 library
   reference: <testLibrary>
@@ -1107,7 +1108,7 @@
     var library = await buildLibrary('''
 import "dart:math" show e, pi;
 ''');
-    var import = library.libraryImports[0];
+    var import = library.definingCompilationUnit.libraryImports[0];
     var combinator = import.combinators[0] as ShowElementCombinator;
     expect(combinator.offset, 19);
     expect(combinator.end, 29);
@@ -1118,7 +1119,8 @@
 import 'foo.dart';
 ''');
 
-    var uri = library.libraryImports[0].uri as DirectiveUriWithLibrary;
+    var libraryImports = library.definingCompilationUnit.libraryImports;
+    var uri = libraryImports[0].uri as DirectiveUriWithLibrary;
     expect(uri.relativeUriString, 'foo.dart');
   }
 
@@ -1281,8 +1283,9 @@
 import 'dart:math' as p1;
 ''');
     var p1 = library.prefixes.singleWhere((prefix) => prefix.name == 'p1');
-    var import_async = library.libraryImports[0];
-    var import_math = library.libraryImports[2];
+    var libraryImports = library.definingCompilationUnit.libraryImports;
+    var import_async = libraryImports[0];
+    var import_math = libraryImports[2];
     expect(p1.imports, unorderedEquals([import_async, import_math]));
   }
 
@@ -1838,7 +1841,8 @@
 
   test_unresolved_import() async {
     var library = await buildLibrary("import 'foo.dart';");
-    var importedLibrary = library.libraryImports[0].importedLibrary!;
+    var libraryImports = library.definingCompilationUnit.libraryImports;
+    var importedLibrary = libraryImports[0].importedLibrary!;
     expect(importedLibrary.loadLibraryFunction, isNotNull);
     expect(importedLibrary.publicNamespace, isNotNull);
     expect(importedLibrary.exportNamespace, isNotNull);
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 4392edc..16dd85f 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -2122,7 +2122,8 @@
       return ImportLibraryElementResultImpl(null);
     }
 
-    for (var import in resolvedUnit.libraryElement.libraryImports) {
+    for (var import
+        in resolvedUnit.libraryElement.definingCompilationUnit.libraryImports) {
       var importedLibrary = import.importedLibrary;
       if (importedLibrary != null && importedLibrary.source.uri == uri) {
         return ImportLibraryElementResultImpl(import.prefix?.element.name);
@@ -2147,7 +2148,8 @@
     if (resolvedUnit.libraryElement.source.uri == uri) return false;
 
     // Existing import.
-    for (var import in resolvedUnit.libraryElement.libraryImports) {
+    for (var import
+        in resolvedUnit.libraryElement.definingCompilationUnit.libraryImports) {
       var importedLibrary = import.importedLibrary;
       if (importedLibrary != null && importedLibrary.source.uri == uri) {
         return true;
@@ -2669,7 +2671,8 @@
   ///
   /// The result may be an existing import, or one that is pending.
   _LibraryImport? _getImportElement(Element element) {
-    for (var import in resolvedUnit.libraryElement.libraryImports) {
+    for (var import
+        in resolvedUnit.libraryElement.definingCompilationUnit.libraryImports) {
       var definedNames = import.namespace.definedNames;
       if (definedNames.containsValue(element)) {
         return _LibraryImport(
@@ -2695,7 +2698,8 @@
 
   List<LibraryImportElement> _getImportsForUri(Uri uri) {
     return [
-      for (var import in resolvedUnit.libraryElement.libraryImports)
+      for (var import
+          in resolvedUnit.libraryElement.definingCompilationUnit.libraryImports)
         if (import.importedLibrary?.source.uri == uri) import,
     ];
   }
@@ -2779,7 +2783,8 @@
           forceAbsolute: forceAbsolute, forceRelative: forceRelative);
       // Collect the list of existing shows and hides for any imports that match
       // the URI and prefix we care about.
-      for (var element in resolvedUnit.libraryElement.libraryImports) {
+      for (var element in resolvedUnit
+          .libraryElement.definingCompilationUnit.libraryImports) {
         var library = element.importedLibrary;
         if (library == null) {
           continue;