Version 2.13.0-112.0.dev

Merge commit '53c8eda9672fe1555821bfa51e31f3c57683da1d' into 'dev'
diff --git a/pkg/analysis_server/analysis_options.yaml b/pkg/analysis_server/analysis_options.yaml
index 254951f..06e8506 100644
--- a/pkg/analysis_server/analysis_options.yaml
+++ b/pkg/analysis_server/analysis_options.yaml
@@ -24,4 +24,5 @@
     - prefer_typing_uninitialized_variables
     - unnecessary_brace_in_string_interps
     - unnecessary_overrides
+    - unnecessary_parenthesis
     - void_checks
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
index e4b17e6..c67d3f7 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_custom_generated.dart
@@ -10,6 +10,7 @@
 // ignore_for_file: deprecated_member_use
 // ignore_for_file: deprecated_member_use_from_same_package
 // ignore_for_file: unnecessary_brace_in_string_interps
+// ignore_for_file: unnecessary_parenthesis
 // ignore_for_file: unused_import
 // ignore_for_file: unused_shown_name
 
diff --git a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
index 4af958b..215bf08 100644
--- a/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/lsp_protocol/protocol_generated.dart
@@ -10,6 +10,7 @@
 // ignore_for_file: deprecated_member_use
 // ignore_for_file: deprecated_member_use_from_same_package
 // ignore_for_file: unnecessary_brace_in_string_interps
+// ignore_for_file: unnecessary_parenthesis
 // ignore_for_file: unused_import
 // ignore_for_file: unused_shown_name
 
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 6fd6cb7..ec9494ef 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -399,13 +399,12 @@
       sdkPath: sdkManager.defaultSdkDirectory,
     );
 
-    for (var context in _collection.contexts) {
-      var contextImpl = context as DriverBasedAnalysisContext;
-      var driver = contextImpl.driver;
+    for (var analysisContext in _collection.contexts) {
+      var driver = analysisContext.driver;
 
       callbacks.listenAnalysisDriver(driver);
 
-      var rootFolder = contextImpl.contextRoot.root;
+      var rootFolder = analysisContext.contextRoot.root;
       driverMap[rootFolder] = driver;
 
       changeSubscriptions[rootFolder] = rootFolder.changes
@@ -413,7 +412,7 @@
 
       _watchBazelFilesIfNeeded(rootFolder, driver);
 
-      for (var file in contextImpl.contextRoot.analyzedFiles()) {
+      for (var file in analysisContext.contextRoot.analyzedFiles()) {
         if (file_paths.isAndroidManifestXml(pathContext, file)) {
           _analyzeAndroidManifestXml(driver, file);
         } else if (file_paths.isDart(pathContext, file)) {
@@ -421,7 +420,7 @@
         }
       }
 
-      var optionsFile = context.contextRoot.optionsFile;
+      var optionsFile = analysisContext.contextRoot.optionsFile;
       if (optionsFile != null) {
         _analyzeAnalysisOptionsYaml(driver, optionsFile.path);
       }
@@ -455,8 +454,7 @@
   void _destroyAnalysisContexts() {
     if (_collection != null) {
       for (var analysisContext in _collection.contexts) {
-        var contextImpl = analysisContext as DriverBasedAnalysisContext;
-        _destroyAnalysisContext(contextImpl);
+        _destroyAnalysisContext(analysisContext);
       }
       callbacks.afterContextsDestroyed();
     }
@@ -530,8 +528,7 @@
     }
 
     if (file_paths.isDart(pathContext, path)) {
-      for (var analysisContext_ in _collection.contexts) {
-        var analysisContext = analysisContext_ as DriverBasedAnalysisContext;
+      for (var analysisContext in _collection.contexts) {
         switch (type) {
           case ChangeType.ADD:
             if (analysisContext.contextRoot.isAnalyzed(path)) {
diff --git a/pkg/analysis_server/lib/src/lsp/mapping.dart b/pkg/analysis_server/lib/src/lsp/mapping.dart
index 298e997..9e59ec6 100644
--- a/pkg/analysis_server/lib/src/lsp/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/mapping.dart
@@ -643,7 +643,7 @@
       message: 'Document URI was not supplied',
     ));
   }
-  final isValidFileUri = (uri?.isScheme('file') ?? false);
+  final isValidFileUri = uri?.isScheme('file') ?? false;
   if (!isValidFileUri) {
     return ErrorOr<String>.error(ResponseError(
       code: lsp.ServerErrorCodes.InvalidFilePath,
diff --git a/pkg/analysis_server/lib/src/plugin/result_merger.dart b/pkg/analysis_server/lib/src/plugin/result_merger.dart
index 91a5a65..0336650b2 100644
--- a/pkg/analysis_server/lib/src/plugin/result_merger.dart
+++ b/pkg/analysis_server/lib/src/plugin/result_merger.dart
@@ -575,12 +575,12 @@
         lengths.addAll(feedback.lengths);
       }
       return ExtractLocalVariableFeedback(names.toList(), offsets, lengths,
-          coveringExpressionOffsets: (coveringExpressionOffsets.isEmpty
+          coveringExpressionOffsets: coveringExpressionOffsets.isEmpty
               ? null
-              : coveringExpressionOffsets),
-          coveringExpressionLengths: (coveringExpressionLengths.isEmpty
+              : coveringExpressionOffsets,
+          coveringExpressionLengths: coveringExpressionLengths.isEmpty
               ? null
-              : coveringExpressionLengths));
+              : coveringExpressionLengths);
     } else if (first is ExtractMethodFeedback) {
       var offset = first.offset;
       var length = first.length;
diff --git a/pkg/analysis_server/lib/src/server/sdk_configuration.dart b/pkg/analysis_server/lib/src/server/sdk_configuration.dart
index 08105f8..c296772 100644
--- a/pkg/analysis_server/lib/src/server/sdk_configuration.dart
+++ b/pkg/analysis_server/lib/src/server/sdk_configuration.dart
@@ -55,7 +55,7 @@
 
   /// Return a string describing the contents of this SDK configuration.
   String get displayString {
-    return _values.keys.map((key) => '$key: ${_values[key]}').join(('\n'));
+    return _values.keys.map((key) => '$key: ${_values[key]}').join('\n');
   }
 
   /// Returns whether this SDK configuration has any configured values.
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
index 6e53137..fed0ed7 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/uri_contributor.dart
@@ -115,7 +115,7 @@
     var source = request.source;
 
     String parentUri;
-    if ((partialUri.endsWith('/'))) {
+    if (partialUri.endsWith('/')) {
       parentUri = partialUri;
     } else {
       parentUri = posix.dirname(partialUri);
diff --git a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
index 2ff7dae..a8634ca 100644
--- a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
@@ -1231,10 +1231,10 @@
     }
     if (body is Block) {
       var block = body;
-      return (!(block.leftBracket.isSynthetic));
+      return !block.leftBracket.isSynthetic;
     }
-    return (lineInfo.getLocation(keyword.offset) ==
-        lineInfo.getLocation(body.offset));
+    return lineInfo.getLocation(keyword.offset) ==
+        lineInfo.getLocation(body.offset);
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart
index 1da824e..d1a5302 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_contains.dart
@@ -76,7 +76,7 @@
         expression.operator.type == TokenType.MINUS) {
       var operand = expression.operand;
       if (operand is IntegerLiteral) {
-        return -(operand.value);
+        return -operand.value;
       }
     }
     throw StateError('invalid integer value');
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
index 0050c6d8..27dd4cb 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_fragment_parser.dart
@@ -429,7 +429,7 @@
   }
 
   /// Return `true` if the [char] is a digit.
-  bool _isDigit(int char) => (char >= $0 && char <= $9);
+  bool _isDigit(int char) => char >= $0 && char <= $9;
 
   /// Return `true` if the [char] is a letter.
   bool _isLetter(int char) =>
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 368b129..7818392 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -777,8 +777,8 @@
       pages.add(MemoryAndCpuPage(this, profiler));
     }
 
-    pages.sort(((Page a, Page b) =>
-        a.title.toLowerCase().compareTo(b.title.toLowerCase())));
+    pages.sort((Page a, Page b) =>
+        a.title.toLowerCase().compareTo(b.title.toLowerCase()));
 
     // Add the status page at the beginning.
     pages.insert(0, StatusPage(this));
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 2fa703a1f..3598a1f 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/analysis_context.dart';
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -18,6 +17,7 @@
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:linter/src/rules.dart';
 import 'package:meta/meta.dart';
 
@@ -47,17 +47,11 @@
   final ByteStore _byteStore = MemoryByteStore();
 
   final Map<String, String> _declaredVariables = {};
-  AnalysisContextCollection _analysisContextCollection;
-
-  List<AnalysisContext> get allContexts {
-    _createAnalysisContexts();
-    return _analysisContextCollection.contexts;
-  }
+  AnalysisContextCollectionImpl _analysisContextCollection;
 
   List<AnalysisDriver> get allDrivers {
-    return allContexts
-        .map((e) => (e as DriverBasedAnalysisContext).driver)
-        .toList();
+    _createAnalysisContexts();
+    return _analysisContextCollection.contexts.map((e) => e.driver).toList();
   }
 
   /// The file system specific `/home/test/analysis_options.yaml` path.
@@ -106,10 +100,7 @@
   }
 
   AnalysisContext contextFor(String path) {
-    _createAnalysisContexts();
-
-    path = convertPath(path);
-    return _analysisContextCollection.contextFor(path);
+    return _contextFor(path);
   }
 
   /// Create an analysis options file based on the given arguments.
@@ -148,8 +139,7 @@
   }
 
   AnalysisDriver driverFor(String path) {
-    var context = contextFor(path) as DriverBasedAnalysisContext;
-    return context.driver;
+    return _contextFor(path).driver;
   }
 
   /// Return the existing analysis context that should be used to analyze the
@@ -174,6 +164,7 @@
       throw StateError('Only dart files can be changed after analysis.');
     }
 
+    _addAnalyzedFileToDrivers(path);
     return super.newFile(path, content: content);
   }
 
@@ -259,6 +250,33 @@
     writePackageConfig(path, config);
   }
 
+  void _addAnalyzedFilesToDrivers() {
+    for (var analysisContext in _analysisContextCollection.contexts) {
+      for (var path in analysisContext.contextRoot.analyzedFiles()) {
+        if (file_paths.isDart(resourceProvider.pathContext, path)) {
+          analysisContext.driver.addFile(path);
+        }
+      }
+    }
+  }
+
+  void _addAnalyzedFileToDrivers(String path) {
+    if (_analysisContextCollection != null) {
+      for (var analysisContext in _analysisContextCollection.contexts) {
+        if (analysisContext.contextRoot.isAnalyzed(path)) {
+          analysisContext.driver.addFile(path);
+        }
+      }
+    }
+  }
+
+  DriverBasedAnalysisContext _contextFor(String path) {
+    _createAnalysisContexts();
+
+    path = convertPath(path);
+    return _analysisContextCollection.contextFor(path);
+  }
+
   /// Create all analysis contexts in [collectionIncludedPaths].
   void _createAnalysisContexts() {
     if (_analysisContextCollection != null) {
@@ -274,6 +292,7 @@
       sdkPath: convertPath(sdkRoot),
     );
 
+    _addAnalyzedFilesToDrivers();
     verifyCreatedCollection();
   }
 }
diff --git a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
index 8f3b055..717b50b 100644
--- a/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
+++ b/pkg/analysis_server/test/channel/byte_stream_channel_test.dart
@@ -38,7 +38,7 @@
     inputSink = IOSink(inputStream);
     var outputStream = StreamController<List<int>>();
     outputLineStream = outputStream.stream
-        .transform((Utf8Codec()).decoder)
+        .transform(Utf8Codec().decoder)
         .transform(LineSplitter());
     outputSink = IOSink(outputStream);
     channel = ByteStreamClientChannel(inputStream.stream, outputSink);
@@ -124,7 +124,7 @@
     inputSink = IOSink(inputStream);
     var outputStream = StreamController<List<int>>();
     outputLineStream = outputStream.stream
-        .transform((Utf8Codec()).decoder)
+        .transform(Utf8Codec().decoder)
         .transform(LineSplitter());
     var outputSink = IOSink(outputStream);
     channel = ByteStreamServerChannel(
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 8f34d32..69a4804 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -518,7 +518,7 @@
       }
     });
     _process.stderr
-        .transform((Utf8Codec()).decoder)
+        .transform(Utf8Codec().decoder)
         .transform(LineSplitter())
         .listen((String line) {
       var trimmedLine = line.trim();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
index b44ebfc..039dd8d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
@@ -57,7 +57,6 @@
 ''', target: '/home/test/lib/a.dart');
   }
 
-  @FailingTest(reason: 'The lint does not fire for parts.')
   Future<void> test_changeInPart() async {
     addSource('/home/test/lib/a.dart', '''
 part 'test.dart';
diff --git a/pkg/analysis_server/test/stress/utilities/server.dart b/pkg/analysis_server/test/stress/utilities/server.dart
index 9bbafb3..5e652d2 100644
--- a/pkg/analysis_server/test/stress/utilities/server.dart
+++ b/pkg/analysis_server/test/stress/utilities/server.dart
@@ -786,7 +786,7 @@
     void installHandler(
         Stream<List<int>> stream, void Function(String) handler) {
       stream
-          .transform((Utf8Codec()).decoder)
+          .transform(Utf8Codec().decoder)
           .transform(LineSplitter())
           .listen(handler);
     }
diff --git a/pkg/analysis_server/test/timing/timing_framework.dart b/pkg/analysis_server/test/timing/timing_framework.dart
index 8dae417..f7d6da1 100644
--- a/pkg/analysis_server/test/timing/timing_framework.dart
+++ b/pkg/analysis_server/test/timing/timing_framework.dart
@@ -79,7 +79,7 @@
       var diff = values[i] - average;
       sumOfDiffSquared += diff * diff;
     }
-    return sqrt((sumOfDiffSquared / (count - 1)));
+    return sqrt(sumOfDiffSquared / (count - 1));
   }
 
   /// Convert the given [times], expressed in nanoseconds, to times expressed in
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index 744cd50..cd32542 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -19,7 +19,6 @@
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
 import 'package:analysis_server/src/status/pages.dart';
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -44,8 +43,8 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
 import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
-import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/dartdoc/dartdoc_directive_info.dart';
 import 'package:analyzer/src/services/available_declarations.dart';
 import 'package:analyzer/src/util/file_paths.dart' as file_paths;
@@ -646,7 +645,7 @@
     // line below.
 //    compareIndividualFeatures();
 
-    final collection = AnalysisContextCollection(
+    final collection = AnalysisContextCollectionImpl(
       includedPaths: [rootPath],
       resourceProvider: PhysicalResourceProvider.INSTANCE,
     );
@@ -830,8 +829,8 @@
       var lines = <LocationTableLine>[];
       for (var entry in metrics.locationMrrComputers.entries) {
         var count = entry.value.count;
-        var mrr = (1 / entry.value.mrr);
-        var mrr_5 = (1 / entry.value.mrr_5);
+        var mrr = 1 / entry.value.mrr;
+        var mrr_5 = 1 / entry.value.mrr_5;
         var product = count * mrr;
         lines.add(LocationTableLine(
             label: entry.key,
@@ -1109,7 +1108,7 @@
   /// should be captured in the [collector].
   Future<void> _computeInContext(ContextRoot root) async {
     // Create a new collection to avoid consuming large quantities of memory.
-    final collection = AnalysisContextCollection(
+    final collection = AnalysisContextCollectionImpl(
       includedPaths: root.includedPaths.toList(),
       excludedPaths: root.excludedPaths.toList(),
       resourceProvider: _provider,
@@ -1174,9 +1173,7 @@
               _provider.setOverlay(filePath,
                   content: overlayContents,
                   modificationStamp: overlayModificationStamp++);
-              (context as DriverBasedAnalysisContext)
-                  .driver
-                  .changeFile(filePath);
+              context.driver.changeFile(filePath);
               resolvedUnitResult =
                   await context.currentSession.getResolvedUnit(filePath);
             }
diff --git a/pkg/analysis_server/tool/lsp_spec/generate_all.dart b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
index ecc3079..782aa26 100644
--- a/pkg/analysis_server/tool/lsp_spec/generate_all.dart
+++ b/pkg/analysis_server/tool/lsp_spec/generate_all.dart
@@ -163,6 +163,7 @@
 // ignore_for_file: deprecated_member_use
 // ignore_for_file: deprecated_member_use_from_same_package
 // ignore_for_file: unnecessary_brace_in_string_interps
+// ignore_for_file: unnecessary_parenthesis
 // ignore_for_file: unused_import
 // ignore_for_file: unused_shown_name
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
index 4de4a89..dbe5024 100644
--- a/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/analysis_context_collection.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/context_locator.dart';
 import 'package:analyzer/dart/analysis/declared_variables.dart';
@@ -11,6 +10,7 @@
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/context_builder.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
+import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
@@ -23,7 +23,7 @@
 
   /// The list of analysis contexts.
   @override
-  final List<AnalysisContext> contexts = [];
+  final List<DriverBasedAnalysisContext> contexts = [];
 
   /// Initialize a newly created analysis context manager.
   AnalysisContextCollectionImpl({
@@ -80,7 +80,7 @@
   }
 
   @override
-  AnalysisContext contextFor(String path) {
+  DriverBasedAnalysisContext contextFor(String path) {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     for (var context in contexts) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index ffead36..531689b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analyzer/dart/analysis/analysis_context.dart';
 import 'package:analyzer/dart/analysis/context_builder.dart';
 import 'package:analyzer/dart/analysis/context_root.dart';
 import 'package:analyzer/dart/analysis/declared_variables.dart';
@@ -38,7 +37,7 @@
             resourceProvider ?? PhysicalResourceProvider.INSTANCE;
 
   @override
-  AnalysisContext createContext({
+  DriverBasedAnalysisContext createContext({
     ByteStore? byteStore,
     required ContextRoot contextRoot,
     DeclaredVariables? declaredVariables,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index fcaacb9..80c2790 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -248,8 +248,6 @@
   /// Whether resolved units should be indexed.
   final bool enableIndex;
 
-  late final DriverAnalyzedFiles analyzedFiles = DriverAnalyzedFiles(this);
-
   /// The current analysis session.
   late AnalysisSessionImpl _currentSession;
 
@@ -448,7 +446,6 @@
     if (!_fsState.hasUri(path)) {
       return;
     }
-    analyzedFiles.reset();
     if (file_paths.isDart(resourceProvider.pathContext, path)) {
       _fileTracker.addFile(path);
       // If the file is known, it has already been read, even if it did not
@@ -1203,7 +1200,6 @@
   /// but does not guarantee this.
   void removeFile(String path) {
     _throwIfNotAbsolutePath(path);
-    analyzedFiles.reset();
     _fileTracker.removeFile(path);
     clearLibraryContext();
     _priorityResults.clear();
@@ -2086,29 +2082,6 @@
             errors);
 }
 
-/// The cache of files analyzed in the driver.
-class DriverAnalyzedFiles {
-  final AnalysisDriver _driver;
-  List<String>? _files;
-
-  DriverAnalyzedFiles(this._driver);
-
-  List<String> get files {
-    var files = _files;
-
-    if (files == null) {
-      var contextRoot = _driver.analysisContext!.contextRoot;
-      _files = files = contextRoot.analyzedFiles().toList();
-    }
-
-    return files;
-  }
-
-  void reset() {
-    _files = null;
-  }
-}
-
 /// An object that watches for the creation and removal of analysis drivers.
 ///
 /// Clients may not extend, implement or mix-in this class.
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 03439d6..821ebf0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -503,7 +503,7 @@
   }
 
   void ownAnalyzed(Search search) {
-    for (var path in search._driver.analyzedFiles.files) {
+    for (var path in search._driver.addedFiles) {
       if (path.endsWith('.dart')) {
         add(path, search);
       }
diff --git a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
index 776814b..af27464 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_builder_test.dart
@@ -7,7 +7,6 @@
 import 'package:analyzer/dart/analysis/declared_variables.dart';
 import 'package:analyzer/src/dart/analysis/context_builder.dart';
 import 'package:analyzer/src/dart/analysis/context_root.dart';
-import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer/src/workspace/basic.dart';
@@ -49,7 +48,7 @@
       contextRoot: contextRoot,
       declaredVariables: declaredVariables,
       sdkPath: resourceProvider.convertPath(sdkRoot),
-    ) as DriverBasedAnalysisContext;
+    );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
     assertEquals(context.driver.declaredVariables, declaredVariables);
@@ -60,10 +59,10 @@
         DeclaredVariables.fromMap({'bar': 'true'});
     MockSdk sdk = MockSdk(resourceProvider: resourceProvider);
     var context = contextBuilder.createContext(
-            contextRoot: contextRoot,
-            declaredVariables: declaredVariables,
-            sdkPath: resourceProvider.convertPath(sdkRoot))
-        as DriverBasedAnalysisContext;
+      contextRoot: contextRoot,
+      declaredVariables: declaredVariables,
+      sdkPath: resourceProvider.convertPath(sdkRoot),
+    );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
     assertEquals(context.driver.declaredVariables, declaredVariables);
@@ -84,9 +83,9 @@
   test_createContext_sdkPath() {
     MockSdk sdk = MockSdk(resourceProvider: resourceProvider);
     var context = contextBuilder.createContext(
-            contextRoot: contextRoot,
-            sdkPath: resourceProvider.convertPath(sdkRoot))
-        as DriverBasedAnalysisContext;
+      contextRoot: contextRoot,
+      sdkPath: resourceProvider.convertPath(sdkRoot),
+    );
     expect(context.analysisOptions, isNotNull);
     expect(context.contextRoot, contextRoot);
     expect(context.driver.sourceFactory.dartSdk!.mapDartUri('dart:core'),
diff --git a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
index 3582753..84d9950 100644
--- a/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/context_collection_resolution.dart
@@ -111,7 +111,7 @@
   ByteStore _byteStore = getContextResolutionTestByteStore();
 
   Map<String, String> _declaredVariables = {};
-  AnalysisContextCollection? _analysisContextCollection;
+  AnalysisContextCollectionImpl? _analysisContextCollection;
 
   /// If not `null`, [resolveFile] will use the context that corresponds
   /// to this path, instead of the given path.
@@ -157,10 +157,7 @@
   }
 
   AnalysisContext contextFor(String path) {
-    _createAnalysisContexts();
-
-    path = convertPath(path);
-    return _analysisContextCollection!.contextFor(path);
+    return _contextFor(path);
   }
 
   void disposeAnalysisContextCollection() {
@@ -170,8 +167,7 @@
   }
 
   AnalysisDriver driverFor(String path) {
-    var context = contextFor(path) as DriverBasedAnalysisContext;
-    return context.driver;
+    return _contextFor(path).driver;
   }
 
   @override
@@ -211,6 +207,13 @@
 
   void verifyCreatedCollection() {}
 
+  DriverBasedAnalysisContext _contextFor(String path) {
+    _createAnalysisContexts();
+
+    path = convertPath(path);
+    return _analysisContextCollection!.contextFor(path);
+  }
+
   /// Create all analysis contexts in [collectionIncludedPaths].
   void _createAnalysisContexts() {
     if (_analysisContextCollection != null) {
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index dde233c..2767510 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -596,8 +596,7 @@
   }
 
   void _setContextForPath(String path) {
-    var analysisContext = _collection.contextFor(path);
-    _analysisContext = analysisContext as DriverBasedAnalysisContext;
+    _analysisContext = _collection.contextFor(path);
   }
 
   void _updateAnalysisOptions(AnalysisOptionsImpl analysisOptions) {
diff --git a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
index f95ad22..7a0c3d4 100644
--- a/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/completion/completion_target_test.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/src/generated/engine.dart' as analyzer;
 import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
 import 'package:test/test.dart';
@@ -670,22 +669,9 @@
   }
 
   Future<void> test_MapLiteral_expression() async {
-    super.setUp();
-    final experimentStatus = (driverFor(testPackageRootPath).analysisOptions
-            as analyzer.AnalysisOptionsImpl)
-        .experimentStatus;
-    if (experimentStatus.control_flow_collections ||
-        experimentStatus.spread_collections) {
-      // SimpleIdentifier  MapLiteral  VariableDeclaration
-      await createTarget('foo = {1: 2, T^');
-      assertTarget('T', '{1 : 2, T}');
-    } else {
-      // TODO(b/35569): remove this branch of test behavior
-
-      // SimpleIdentifier  MapLiteralEntry  MapLiteral  VariableDeclaration
-      await createTarget('foo = {1: 2, T^');
-      assertTarget('T : ', '{1 : 2, T : }');
-    }
+    // SimpleIdentifier  MapLiteral  VariableDeclaration
+    await createTarget('foo = {1: 2, T^');
+    assertTarget('T', '{1 : 2, T}');
   }
 
   Future<void> test_MapLiteralEntry() async {
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index e98a83e..d9f4ca7 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -11,8 +11,6 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
-import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
 import 'package:analyzer/src/test_utilities/mock_packages.dart';
@@ -89,11 +87,6 @@
     newFile(testPackageAnalysisOptionsPath, content: buffer.toString());
   }
 
-  AnalysisDriver driverFor(String path) {
-    var context = contextFor(path) as DriverBasedAnalysisContext;
-    return context.driver;
-  }
-
   @override
   File newFile(String path, {String content = ''}) {
     if (_analysisContextCollection != null && !path.endsWith('.dart')) {
diff --git a/pkg/nnbd_migration/lib/migration_cli.dart b/pkg/nnbd_migration/lib/migration_cli.dart
index a727c1c..5705e9a 100644
--- a/pkg/nnbd_migration/lib/migration_cli.dart
+++ b/pkg/nnbd_migration/lib/migration_cli.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 import 'dart:io' hide File;
 
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/features.dart';
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/diagnostic/diagnostic.dart';
@@ -511,7 +510,7 @@
 
   _FixCodeProcessor _fixCodeProcessor;
 
-  AnalysisContextCollection _contextCollection;
+  AnalysisContextCollectionImpl _contextCollection;
 
   bool _hasExceptions = false;
 
@@ -531,16 +530,15 @@
     // Handle the case of more than one analysis context being found (typically,
     // the current directory and one or more sub-directories).
     if (hasMultipleAnalysisContext) {
-      return contextCollection.contextFor(options.directory)
-          as DriverBasedAnalysisContext;
+      return contextCollection.contextFor(options.directory);
     } else {
-      return contextCollection.contexts.single as DriverBasedAnalysisContext;
+      return contextCollection.contexts.single;
     }
   }
 
   Ansi get ansi => logger.ansi;
 
-  AnalysisContextCollection get contextCollection {
+  AnalysisContextCollectionImpl get contextCollection {
     _contextCollection ??= AnalysisContextCollectionImpl(
         includedPaths: [options.directory],
         resourceProvider: resourceProvider,
diff --git a/pkg/nnbd_migration/test/abstract_context.dart b/pkg/nnbd_migration/test/abstract_context.dart
index a52c469..b5d1783 100644
--- a/pkg/nnbd_migration/test/abstract_context.dart
+++ b/pkg/nnbd_migration/test/abstract_context.dart
@@ -5,7 +5,6 @@
 import 'dart:convert';
 
 import 'package:analyzer/dart/analysis/analysis_context.dart';
-import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
 import 'package:analyzer/dart/analysis/session.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/overlay_file_system.dart';
@@ -22,7 +21,7 @@
 class AbstractContextTest with ResourceProviderMixin {
   OverlayResourceProvider overlayResourceProvider;
 
-  AnalysisContextCollection _analysisContextCollection;
+  AnalysisContextCollectionImpl _analysisContextCollection;
   AnalysisDriver _driver;
 
   final Set<String> knownPackages = {};
@@ -109,20 +108,14 @@
   /// given [path], or throw [StateError] if the [path] is not analyzed in any
   /// of the created analysis contexts.
   AnalysisContext getContext(String path) {
-    if (_analysisContextCollection == null) {
-      _createAnalysisContexts();
-    }
-    path = convertPath(path);
-    return _analysisContextCollection.contextFor(path);
+    return _getContext(path);
   }
 
   /// Return the existing analysis driver that should be used to analyze the
   /// given [path], or throw [StateError] if the [path] is not analyzed in any
   /// of the created analysis contexts.
   AnalysisDriver getDriver(String path) {
-    DriverBasedAnalysisContext context =
-        getContext(path) as DriverBasedAnalysisContext;
-    return context.driver;
+    return _getContext(path).driver;
   }
 
   LineInfo getLineInfo(String path) => session.getFile(path).lineInfo;
@@ -189,4 +182,15 @@
 
     _driver = getDriver(convertPath(testsPath));
   }
+
+  /// Return the existing analysis context that should be used to analyze the
+  /// given [path], or throw [StateError] if the [path] is not analyzed in any
+  /// of the created analysis contexts.
+  DriverBasedAnalysisContext _getContext(String path) {
+    if (_analysisContextCollection == null) {
+      _createAnalysisContexts();
+    }
+    path = convertPath(path);
+    return _analysisContextCollection.contextFor(path);
+  }
 }
diff --git a/tools/VERSION b/tools/VERSION
index 24f1ba5..9e39240 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 111
+PRERELEASE 112
 PRERELEASE_PATCH 0
\ No newline at end of file