diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index 7f8d2e5..23790f4 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -262,7 +262,7 @@
   var path = <Element>[];
 
   if (element is engine.PrefixElement) {
-    element = element.enclosingElement.definingCompilationUnit;
+    element = element.enclosingElement2.definingCompilationUnit;
   }
 
   var withNullability = element.library?.isNonNullableByDefault ?? false;
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 4462b02..4396c0f 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -3,6 +3,7 @@
 * Deprecated `ResourceProviderMixin.newFile2`, use `newFile` instead.
 * Deprecated `ResourceProviderMixin.newAnalysisOptionsYamlFile2`, use `newAnalysisOptionsYamlFile` instead.
 * Deprecated `DartType.resolveToBound`, use `TypeSystem.resolveToBound` instead.
+* Deprecated `LibraryElement.getImportsWithPrefix`, use `PrefixElement.imports` instead.
 
 ## 4.0.0
 * Removed deprecated `UriKind` and `Source.uriKind`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 1ac9cdd..6ed4c00 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1397,6 +1397,7 @@
 
   /// Return a list containing all of the imports that share the given [prefix],
   /// or an empty array if there are no such imports.
+  @Deprecated('Use PrefixElement.imports instead')
   List<ImportElement> getImportsWithPrefix(PrefixElement prefix);
 
   /// Return the class defined in this library that has the given [name], or
@@ -1658,6 +1659,9 @@
   @experimental
   LibraryOrAugmentationElement get enclosingElement2;
 
+  /// Return the imports that share this prefix.
+  List<ImportElement> get imports;
+
   @override
   String get name;
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index b7fddeb..4fc7f27 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -47,7 +47,7 @@
 class ExternalLibrary {
   final Uri uri;
 
-  ExternalLibrary(this.uri);
+  ExternalLibrary._(this.uri);
 }
 
 /// [FileContentOverlay] is used to temporary override content of files.
@@ -232,20 +232,9 @@
 
   LibraryCycle? get internal_libraryCycle => _libraryCycle;
 
-  /// Return `true` if the file is a stub created for a library in the provided
-  /// external summary store.
-  bool get isExternalLibrary {
-    return _fsState.externalSummaries != null &&
-        _fsState.externalSummaries!.hasLinkedLibrary(uriStr);
-  }
-
   /// Return `true` if the file does not have a `library` directive, and has a
   /// `part of` directive, so is probably a part.
   bool get isPart {
-    if (_fsState.externalSummaries != null &&
-        _fsState.externalSummaries!.hasUnlinkedUnit(uriStr)) {
-      return _fsState.externalSummaries!.isPartUnit(uriStr);
-    }
     return !_unlinked2!.hasLibraryDirective && _unlinked2!.hasPartOfDirective;
   }
 
@@ -872,10 +861,11 @@
   Either2<FileState?, ExternalLibrary> getFileForUri(Uri uri) {
     // If the external store has this URI, create a stub file for it.
     // We are given all required unlinked and linked summaries for it.
+    final externalSummaries = this.externalSummaries;
     if (externalSummaries != null) {
       String uriStr = uri.toString();
-      if (externalSummaries!.hasLinkedLibrary(uriStr)) {
-        return Either2.t2(ExternalLibrary(uri));
+      if (externalSummaries.hasLinkedLibrary(uriStr)) {
+        return Either2.t2(ExternalLibrary._(uri));
       }
     }
 
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 524586d..cc15afe 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -8891,8 +8891,7 @@
   bool get isDeferred {
     Element? element = _prefix.staticElement;
     if (element is PrefixElement) {
-      List<ImportElement> imports =
-          element.enclosingElement.getImportsWithPrefix(element);
+      List<ImportElement> imports = element.imports;
       if (imports.length != 1) {
         return false;
       }
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 94e99c7..370ca14 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -4021,9 +4021,10 @@
     return null;
   }
 
+  @Deprecated('Use PrefixElement.imports instead')
   @override
-  List<ImportElement> getImportsWithPrefix(PrefixElement prefixElement) {
-    return getImportsWithPrefixFromImports(prefixElement, imports);
+  List<ImportElement> getImportsWithPrefix(PrefixElement prefix) {
+    return prefix.imports;
   }
 
   @override
@@ -4119,18 +4120,6 @@
     return prefixes.toList(growable: false);
   }
 
-  static List<ImportElement> getImportsWithPrefixFromImports(
-      PrefixElement prefixElement, List<ImportElement> imports) {
-    int count = imports.length;
-    List<ImportElement> importList = <ImportElement>[];
-    for (int i = 0; i < count; i++) {
-      if (identical(imports[i].prefix, prefixElement)) {
-        importList.add(imports[i]);
-      }
-    }
-    return importList;
-  }
-
   static ClassElement? getTypeFromParts(
       String className,
       CompilationUnitElement definingCompilationUnit,
@@ -5104,13 +5093,21 @@
   @override
   String get displayName => name;
 
+  @Deprecated('Use enclosingElement2 instead')
   @override
   LibraryElement get enclosingElement =>
       super.enclosingElement as LibraryElement;
 
   @override
-  LibraryOrAugmentationElementImpl get enclosingElement2 =>
-      super.enclosingElement as LibraryOrAugmentationElementImpl;
+  LibraryOrAugmentationElement get enclosingElement2 =>
+      super.enclosingElement as LibraryOrAugmentationElement;
+
+  @override
+  List<ImportElement> get imports {
+    return enclosingElement2.imports
+        .where((import) => identical(import.prefix, this))
+        .toList();
+  }
 
   @override
   ElementKind get kind => ElementKind.PREFIX;
@@ -5121,7 +5118,7 @@
   }
 
   @override
-  Scope get scope => _scope ??= PrefixScope(enclosingElement, this);
+  Scope get scope => _scope ??= PrefixScope(enclosingElement2, this);
 
   @override
   T? accept<T>(ElementVisitor<T> visitor) => visitor.visitPrefixElement(this);
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index bf0f7e8..e8c8698 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -133,7 +133,7 @@
 }
 
 class PrefixScope implements Scope {
-  final LibraryElement _library;
+  final LibraryOrAugmentationElement _library;
   final Map<String, Element> _getters = {};
   final Map<String, Element> _setters = {};
   final Set<ExtensionElement> _extensions = {};
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 8fdaa1a..44f0869 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -654,7 +654,7 @@
     // Note: prefix?.bar is reported as an error in ElementResolver.
 
     if (name == FunctionElement.LOAD_LIBRARY_NAME) {
-      var imports = _definingLibrary.getImportsWithPrefix(prefix);
+      var imports = prefix.imports;
       if (imports.length == 1 && imports[0].isDeferred) {
         var importedLibrary = imports[0].importedLibrary;
         var element = importedLibrary?.loadLibraryFunction;
diff --git a/tools/VERSION b/tools/VERSION
index 5b795aa..21165ce 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 116
+PRERELEASE 117
 PRERELEASE_PATCH 0
\ No newline at end of file
