Ask LinkedElementFactory from the enclosing library / augmentation.

Change-Id: I0d3e89d9384ac87126c3e8bcb89505b239959f2c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249400
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 765ffc5..a2bca9a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3649,7 +3649,7 @@
 class LibraryAugmentationElementImpl extends LibraryOrAugmentationElementImpl
     implements LibraryAugmentationElement {
   @override
-  final LibraryOrAugmentationElement augmented;
+  final LibraryOrAugmentationElementImpl augmented;
 
   LibraryAugmentationElementImpl({
     required this.augmented,
@@ -3677,7 +3677,7 @@
   Scope get scope => throw UnimplementedError();
 
   @override
-  AnalysisSession get session => augmented.session;
+  AnalysisSessionImpl get session => augmented.session;
 
   @override
   TypeProvider get typeProvider => augmented.typeProvider;
@@ -4231,6 +4231,9 @@
       _prefixes ??= buildPrefixesFromImports(imports);
 
   @override
+  AnalysisSessionImpl get session;
+
+  @override
   Source get source {
     return _definingCompilationUnit.source;
   }
@@ -5098,8 +5101,8 @@
       super.enclosingElement as LibraryElement;
 
   @override
-  LibraryOrAugmentationElement get enclosingElement2 =>
-      super.enclosingElement as LibraryOrAugmentationElement;
+  LibraryOrAugmentationElementImpl get enclosingElement2 =>
+      super.enclosingElement as LibraryOrAugmentationElementImpl;
 
   @override
   List<ImportElement> get imports {
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index 259ad2c..f57b6e0 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -108,10 +108,10 @@
 }
 
 class LibraryScope extends EnclosedScope {
-  final LibraryElement _element;
+  final LibraryElementImpl _element;
   final List<ExtensionElement> extensions = [];
 
-  LibraryScope(LibraryElement element)
+  LibraryScope(LibraryElementImpl element)
       : _element = element,
         super(_LibraryImportScope(element)) {
     extensions.addAll((_parent as _LibraryImportScope).extensions);
@@ -147,19 +147,18 @@
 }
 
 class PrefixScope implements Scope {
-  final LibraryOrAugmentationElement _library;
+  final LibraryOrAugmentationElementImpl _library;
   final Map<String, ImportedElement> _getters = {};
   final Map<String, ImportedElement> _setters = {};
   final Set<ExtensionElement> _extensions = {};
   LibraryElement? _deferredLibrary;
 
   PrefixScope(this._library, PrefixElement? prefix) {
-    for (var import in _library.imports) {
+    final elementFactory = _library.session.elementFactory;
+    for (final import in _library.imports) {
       if (import.prefix == prefix) {
         final importedLibrary = import.importedLibrary;
         if (importedLibrary is LibraryElementImpl) {
-          // TODO(scheglov) Ask it from `_library`.
-          final elementFactory = importedLibrary.session.elementFactory;
           final combinators = import.combinators.build();
           for (final exportedReference in importedLibrary.exportedReferences) {
             final reference = exportedReference.reference;
@@ -330,11 +329,11 @@
 }
 
 class _LibraryImportScope implements Scope {
-  final LibraryElement _library;
+  final LibraryElementImpl _library;
   final PrefixScope _nullPrefixScope;
   List<ExtensionElement>? _extensions;
 
-  _LibraryImportScope(LibraryElement library)
+  _LibraryImportScope(LibraryElementImpl library)
       : _library = library,
         _nullPrefixScope = PrefixScope(library, null);