diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 762ea4b..6e3eab5 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.6.0-dev
+* Deprecated `AnalysisDriver` default constructor.  Added `tmp1`. The goal
+  is to allow deprecating and removing unused  parameters.
+
 ## 1.5.0
 * Support for the language version `2.14`.
 * Deprecated `AnalysisSession.getUnitElement()`.
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index 8887ae4..5a65513 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -13,7 +13,6 @@
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart'
     show AnalysisDriver, AnalysisDriverScheduler;
-import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -110,15 +109,13 @@
     final sf =
         createSourceFactoryFromWorkspace(workspace, summaryData: summaryData);
 
-    AnalysisDriver driver = AnalysisDriver(
-      analysisDriverScheduler,
-      performanceLog,
-      resourceProvider,
-      byteStore,
-      FileContentOverlay(),
-      contextRoot,
-      sf,
-      options,
+    AnalysisDriver driver = AnalysisDriver.tmp1(
+      scheduler: analysisDriverScheduler,
+      logger: performanceLog,
+      resourceProvider: resourceProvider,
+      byteStore: byteStore,
+      sourceFactory: sf,
+      analysisOptions: options,
       packages: createPackageMap(
         resourceProvider: resourceProvider,
         options: builderOptions,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 712f844..a1ecf39 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -126,10 +126,6 @@
   /// The declared environment variables.
   DeclaredVariables declaredVariables = DeclaredVariables();
 
-  /// Information about the context root being analyzed by this driver.
-  @Deprecated('Use analysisContext instead')
-  final ContextRoot? contextRoot;
-
   /// The analysis context that created this driver / session.
   api.AnalysisContext? analysisContext;
 
@@ -263,21 +259,62 @@
   ///
   /// The given [SourceFactory] is cloned to ensure that it does not contain a
   /// reference to a [AnalysisContext] in which it could have been used.
-  AnalysisDriver(
-      this._scheduler,
-      PerformanceLog logger,
-      this._resourceProvider,
-      this._byteStore,
-      this._contentOverlay,
-      this.contextRoot,
-      SourceFactory sourceFactory,
-      this._analysisOptions,
-      {Packages? packages,
-      this.enableIndex = false,
-      SummaryDataStore? externalSummaries,
-      bool retainDataForTesting = false})
-      : _logger = logger,
-        _packages = packages ?? Packages.empty,
+  @Deprecated('Use AnalysisDriver.tmp1() instead')
+  factory AnalysisDriver(
+    AnalysisDriverScheduler scheduler,
+    PerformanceLog logger,
+    ResourceProvider resourceProvider,
+    ByteStore byteStore,
+    FileContentOverlay? contentOverlay,
+    // ignore: avoid_unused_constructor_parameters
+    ContextRoot? contextRoot,
+    SourceFactory sourceFactory,
+    AnalysisOptionsImpl analysisOptions, {
+    Packages? packages,
+    bool enableIndex = false,
+    SummaryDataStore? externalSummaries,
+    bool retainDataForTesting = false,
+  }) {
+    return AnalysisDriver.tmp1(
+      scheduler: scheduler,
+      logger: logger,
+      resourceProvider: resourceProvider,
+      byteStore: byteStore,
+      contentOverlay: contentOverlay,
+      sourceFactory: sourceFactory,
+      analysisOptions: analysisOptions,
+      packages: packages ?? Packages.empty,
+      enableIndex: enableIndex,
+      externalSummaries: externalSummaries,
+      retainDataForTesting: retainDataForTesting,
+    );
+  }
+
+  /// Create a new instance of [AnalysisDriver].
+  ///
+  /// The given [SourceFactory] is cloned to ensure that it does not contain a
+  /// reference to a [AnalysisContext] in which it could have been used.
+  AnalysisDriver.tmp1({
+    required AnalysisDriverScheduler scheduler,
+    required PerformanceLog logger,
+    required ResourceProvider resourceProvider,
+    required ByteStore byteStore,
+    @Deprecated('Use OverlayResourceProvider instead')
+        FileContentOverlay? contentOverlay,
+    required SourceFactory sourceFactory,
+    required AnalysisOptionsImpl analysisOptions,
+    required Packages packages,
+    bool enableIndex = false,
+    SummaryDataStore? externalSummaries,
+    bool retainDataForTesting = false,
+  })  : _scheduler = scheduler,
+        _resourceProvider = resourceProvider,
+        _byteStore = byteStore,
+        _contentOverlay = contentOverlay ?? FileContentOverlay(),
+        _analysisOptions = analysisOptions,
+        enableIndex = enableIndex,
+        _logger = logger,
+        _packages = packages,
         _sourceFactory = sourceFactory,
         _externalSummaries = externalSummaries,
         testingData = retainDataForTesting ? TestingData() : null {
diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart
index dceca73..c77fc12 100644
--- a/pkg/analyzer/lib/src/lint/analysis.dart
+++ b/pkg/analyzer/lib/src/lint/analysis.dart
@@ -17,7 +17,6 @@
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart'
     as api;
-import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/sdk/sdk.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -159,15 +158,13 @@
 
     PerformanceLog log = PerformanceLog(null);
     AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(log);
-    AnalysisDriver analysisDriver = AnalysisDriver(
-      scheduler,
-      log,
-      resourceProvider,
-      MemoryByteStore(),
-      FileContentOverlay(),
-      null,
-      sourceFactory,
-      _buildAnalyzerOptions(options),
+    AnalysisDriver analysisDriver = AnalysisDriver.tmp1(
+      scheduler: scheduler,
+      logger: log,
+      resourceProvider: resourceProvider,
+      byteStore: MemoryByteStore(),
+      sourceFactory: sourceFactory,
+      analysisOptions: _buildAnalyzerOptions(options),
       packages: Packages.empty,
     );
 
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 5e98178..5d25278 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 1.5.0
+version: 1.6.0-dev
 description: This package provides a library that performs static analysis of Dart code.
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
 
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 6b9f30f..542e7f8 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -9,7 +9,6 @@
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/analysis/status.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
@@ -25,7 +24,6 @@
 class BaseAnalysisDriverTest with ResourceProviderMixin {
   late final DartSdk sdk;
   final ByteStore byteStore = MemoryByteStore();
-  final FileContentOverlay contentOverlay = FileContentOverlay();
 
   final StringBuffer logBuffer = StringBuffer();
   late final PerformanceLog logger;
@@ -61,42 +59,41 @@
       'aaa': [getFolder('/aaa/lib')],
       'bbb': [getFolder('/bbb/lib')],
     };
-    return AnalysisDriver(
-        scheduler,
-        logger,
-        resourceProvider,
-        byteStore,
-        contentOverlay,
-        null,
-        SourceFactory([
-          DartUriResolver(sdk),
-          generatedUriResolver,
-          PackageMapUriResolver(resourceProvider, packageMap),
-          ResourceUriResolver(resourceProvider)
-        ]),
-        createAnalysisOptions(),
-        packages: Packages({
-          'test': Package(
-            name: 'test',
-            rootFolder: getFolder(testProject),
-            libFolder: getFolder('$testProject/lib'),
-            languageVersion: Version.parse('2.9.0'),
-          ),
-          'aaa': Package(
-            name: 'aaa',
-            rootFolder: getFolder('/aaa'),
-            libFolder: getFolder('/aaa/lib'),
-            languageVersion: Version.parse('2.9.0'),
-          ),
-          'bbb': Package(
-            name: 'bbb',
-            rootFolder: getFolder('/bbb'),
-            libFolder: getFolder('/bbb/lib'),
-            languageVersion: Version.parse('2.9.0'),
-          ),
-        }),
-        enableIndex: true,
-        externalSummaries: externalSummaries);
+    return AnalysisDriver.tmp1(
+      scheduler: scheduler,
+      logger: logger,
+      resourceProvider: resourceProvider,
+      byteStore: byteStore,
+      sourceFactory: SourceFactory([
+        DartUriResolver(sdk),
+        generatedUriResolver,
+        PackageMapUriResolver(resourceProvider, packageMap),
+        ResourceUriResolver(resourceProvider)
+      ]),
+      analysisOptions: createAnalysisOptions(),
+      packages: Packages({
+        'test': Package(
+          name: 'test',
+          rootFolder: getFolder(testProject),
+          libFolder: getFolder('$testProject/lib'),
+          languageVersion: Version.parse('2.9.0'),
+        ),
+        'aaa': Package(
+          name: 'aaa',
+          rootFolder: getFolder('/aaa'),
+          libFolder: getFolder('/aaa/lib'),
+          languageVersion: Version.parse('2.9.0'),
+        ),
+        'bbb': Package(
+          name: 'bbb',
+          rootFolder: getFolder('/bbb'),
+          libFolder: getFolder('/bbb/lib'),
+          languageVersion: Version.parse('2.9.0'),
+        ),
+      }),
+      enableIndex: true,
+      externalSummaries: externalSummaries,
+    );
   }
 
   AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index ab12ee4..c8925ec 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -10,7 +10,6 @@
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/analysis/status.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
@@ -54,7 +53,6 @@
 class AnalysisDriverSchedulerTest with ResourceProviderMixin {
   late DartSdk sdk;
   final ByteStore byteStore = MemoryByteStore();
-  final FileContentOverlay contentOverlay = FileContentOverlay();
 
   final StringBuffer logBuffer = StringBuffer();
   late final PerformanceLog logger;
@@ -65,18 +63,17 @@
 
   AnalysisDriver newDriver() {
     sdk = MockSdk(resourceProvider: resourceProvider);
-    AnalysisDriver driver = AnalysisDriver(
-        scheduler,
-        logger,
-        resourceProvider,
-        byteStore,
-        contentOverlay,
-        null,
-        SourceFactory(
-          [DartUriResolver(sdk), ResourceUriResolver(resourceProvider)],
-        ),
-        AnalysisOptionsImpl(),
-        packages: Packages.empty);
+    AnalysisDriver driver = AnalysisDriver.tmp1(
+      scheduler: scheduler,
+      logger: logger,
+      resourceProvider: resourceProvider,
+      byteStore: byteStore,
+      sourceFactory: SourceFactory(
+        [DartUriResolver(sdk), ResourceUriResolver(resourceProvider)],
+      ),
+      analysisOptions: AnalysisOptionsImpl(),
+      packages: Packages.empty,
+    );
     driver.results.forEach(allResults.add);
     return driver;
   }
@@ -2417,25 +2414,6 @@
     expect(typeC.element.getField('bar'), isNull);
   }
 
-  test_hermetic_overlayOnly_part() async {
-    var a = convertPath('/test/lib/a.dart');
-    var b = convertPath('/test/lib/b.dart');
-    contentOverlay[a] = r'''
-library a;
-part 'b.dart';
-class A {}
-var b = new B();
-''';
-    contentOverlay[b] = 'part of a; class B {}';
-
-    driver.addFile(a);
-    driver.addFile(b);
-
-    ResolvedUnitResult result = await driver.getResultValid(a);
-    expect(result.errors, isEmpty);
-    _assertTopLevelVarType(result.unit!, 'b', 'B');
-  }
-
   test_importOfNonLibrary_part_afterLibrary() async {
     var a = convertPath('/test/lib/a.dart');
     var b = convertPath('/test/lib/b.dart');
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index e8c4e79..6d75b6f 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -19,7 +19,6 @@
 import 'package:analyzer/src/context/packages.dart';
 import 'package:analyzer/src/dart/analysis/byte_store.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
-import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 import 'package:analyzer/src/dart/analysis/testing_data.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -146,21 +145,20 @@
   var byteStore = MemoryByteStore();
   var analysisOptions = AnalysisOptionsImpl()
     ..contextFeatures = config.featureSet;
-  var driver = AnalysisDriver(
-      scheduler,
-      logger,
-      resourceProvider,
-      byteStore,
-      FileContentOverlay(),
-      null,
-      SourceFactory([
-        DartUriResolver(sdk),
-        PackageMapUriResolver(resourceProvider, packageMap),
-        ResourceUriResolver(resourceProvider)
-      ]),
-      analysisOptions,
-      packages: Packages.empty,
-      retainDataForTesting: true);
+  var driver = AnalysisDriver.tmp1(
+    scheduler: scheduler,
+    logger: logger,
+    resourceProvider: resourceProvider,
+    byteStore: byteStore,
+    sourceFactory: SourceFactory([
+      DartUriResolver(sdk),
+      PackageMapUriResolver(resourceProvider, packageMap),
+      ResourceUriResolver(resourceProvider)
+    ]),
+    analysisOptions: analysisOptions,
+    packages: Packages.empty,
+    retainDataForTesting: true,
+  );
   scheduler.start();
 
   Map<Uri, Map<Id, ActualData<T>>> actualMaps = <Uri, Map<Id, ActualData<T>>>{};
