diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index a36ee5c..2c1a0b3 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -8,7 +8,6 @@
 import 'package:analyzer/src/dart/ast/ast.dart' as ast;
 import 'package:analyzer/src/dart/ast/mixin_super_invoked_names.dart';
 import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/scope.dart';
 import 'package:analyzer/src/dart/resolver/scope.dart';
 import 'package:analyzer/src/summary2/combinator.dart';
 import 'package:analyzer/src/summary2/constructor_initializer_resolver.dart';
@@ -29,8 +28,6 @@
   final LibraryElementImpl element;
   final List<LinkingUnit> units;
 
-  late final LibraryScope scope;
-
   /// Local declarations.
   final Scope localScope = Scope.top();
 
@@ -130,10 +127,6 @@
     });
   }
 
-  void buildScope() {
-    scope = element.scope as LibraryScope;
-  }
-
   void collectMixinSuperInvokedNames() {
     for (var linkingUnit in units) {
       for (var declaration in linkingUnit.node.declarations) {
@@ -162,7 +155,7 @@
 
   void resolveMetadata() {
     for (var linkingUnit in units) {
-      var resolver = MetadataResolver(linker, scope, linkingUnit.element);
+      var resolver = MetadataResolver(linker, element, linkingUnit.element);
       linkingUnit.node.accept(resolver);
     }
   }
@@ -176,7 +169,6 @@
         element,
         linkingUnit.reference,
         linkingUnit.node.featureSet.isEnabled(Feature.non_nullable),
-        scope,
       );
       linkingUnit.node.accept(resolver);
     }
@@ -184,6 +176,7 @@
 
   void storeExportScope() {
     exports = exportScope.map.values.toList();
+    linker.elementFactory.setExportsOfLibrary('$uri', exports);
 
     var definedNames = <String, Element>{};
     for (var entry in exportScope.map.entries) {
@@ -200,8 +193,6 @@
     if (entryPoint is FunctionElement) {
       element.entryPoint = entryPoint;
     }
-
-    linker.elementFactory.setExportsOfLibrary('$uri', exports);
   }
 
   static void build(Linker linker, LinkInputLibrary inputLibrary) {
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 4cc4a03..f0b0174 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -160,10 +160,6 @@
     for (var library in builders.values) {
       library.storeExportScope();
     }
-
-    for (var library in builders.values) {
-      library.buildScope();
-    }
   }
 
   void _createTypeSystem() {
diff --git a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
index 4b4a1ad..3bf8d56 100644
--- a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
@@ -17,8 +17,12 @@
   final CompilationUnitElementImpl _unitElement;
   Scope _scope;
 
-  MetadataResolver(this._linker, this._libraryScope, this._unitElement)
-      : _scope = _libraryScope;
+  MetadataResolver(
+    this._linker,
+    LibraryElementImpl libraryElement,
+    this._unitElement,
+  )   : _libraryScope = libraryElement.scope,
+        _scope = libraryElement.scope;
 
   @override
   void visitAnnotation(covariant AnnotationImpl node) {
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 9169ffb..ea3f216 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -48,8 +48,8 @@
     LibraryElementImpl libraryElement,
     this.unitReference,
     this.isNNBD,
-    this.scope,
-  ) : _typeSystem = libraryElement.typeSystem;
+  )   : _typeSystem = libraryElement.typeSystem,
+        scope = libraryElement.scope;
 
   @override
   void visitBlockFunctionBody(BlockFunctionBody node) {}
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index a9072ab..7c85b60d 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -46,7 +46,7 @@
         unit.extensions.forEach(_resolveExtensionFields);
         unit.mixins.forEach(_resolveClassFields);
 
-        _scope = builder.scope;
+        _scope = builder.element.scope;
         unit.topLevelVariables.forEach(_resolveVariable);
       }
     }
@@ -338,7 +338,7 @@
         unit.extensions.forEach(_addExtensionElementFields);
         unit.mixins.forEach(_addClassElementFields);
 
-        _scope = builder.scope;
+        _scope = builder.element.scope;
         for (var element in unit.topLevelVariables) {
           _addVariableNode(element);
         }
diff --git a/tools/VERSION b/tools/VERSION
index c5429f5..51acfad 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 284
+PRERELEASE 285
 PRERELEASE_PATCH 0
\ No newline at end of file
