Version 2.15.0-104.0.dev

Merge commit 'b1491fc43ec037867f596c24b98aa6ad5fa8fd73' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6ddec26..0fed6d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -132,7 +132,18 @@
 - fixes false positives in `use_rethrow_when_possible`.
 - improves performance for `annotate_overrides`, `prefer_contains`, and
   `prefer_void_to_null`.
+
 ### Pub
+
+- Adds support for token-based authorization to third party package-repositories
+  with the new command `dart pub token`.
+- Credentials are no longer stored in the pub-cache, but in a platform dependent
+  config directory:
+  * On Linux `$XDG_CONFIG_HOME/dart/pub-credentials.json` if `$XDG_CONFIG_HOME`
+    is defined, otherwise `$HOME/.config/dart/pub-credentials.json`
+  * On Mac OS: `$HOME/Library/Application Support/dart/pub-credentials.json`
+  * On Windows: `%APPDATA%/dart/pub-credentials.json`
+
 - Detect potential leaks in `dart pub publish`.
   When publishing, pub will examine your files for potential secret keys, and
   warn you.
@@ -140,7 +151,10 @@
   To ignore a file that has a false positive, add it to a
   [`false_secrets`](https://dart.dev/go/false-secrets) section of your
   `pubspec.yaml`.
-- Fixes unicode terminal detection windows
+- Fixes unicode terminal detection windows.
+- New flag `--example` to the commands 
+  `dart pub get/upgrade/downgrade/add/remove` that will result in the `example/`
+  folder dependencies to be updated after operating in the current directory. 
 
 ## 2.14.1 - 2021-09-09
 
diff --git a/DEPS b/DEPS
index 427f6e8..0f21607 100644
--- a/DEPS
+++ b/DEPS
@@ -138,7 +138,7 @@
   "pool_rev": "7abe634002a1ba8a0928eded086062f1307ccfae",
   "process_rev": "56ece43b53b64c63ae51ec184b76bd5360c28d0b",
   "protobuf_rev": "c1eb6cb51af39ccbaa1a8e19349546586a5c8e31",
-  "pub_rev": "d95c5713dda518ed53ada70e00789e6aadbfbe48",
+  "pub_rev": "cafadd17ba285dad9ebe6d34c617bc0d70d096b3",
   "pub_semver_rev": "a43ad72fb6b7869607581b5fedcb186d1e74276a",
   "resource_rev": "6b79867d0becf5395e5819a75720963b8298e9a7",
   "root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
@@ -163,7 +163,7 @@
   "test_reflective_loader_rev": "fcfce37666672edac849d2af6dffc0f8df236a94",
   "test_rev": "099dcc4d052a30c6921489cfbefa1c8531d12975",
   "typed_data_rev": "29ce5a92b03326d0b8035916ac04f528874994bd",
-  "usage_rev": "e0780cd8b2f8af69a28dc52678ffe8492da27d06",
+  "usage_rev": "016dd302b494e4ff70a7850957ec895eced9d220",
   "vector_math_rev": "0c9f5d68c047813a6dcdeb88ba7a42daddf25025",
   "watcher_rev": "3924194385fb215cef483193ed2879a618a3d69c",
   "webdriver_rev": "ff5ccb1522edf4bed578ead4d65e0cbc1f2c4f02",
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index c4f5c6a..c33aafe 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -1093,9 +1093,41 @@
 
   @override
   DartObjectImpl? visitConstructorReference(ConstructorReference node) {
-    // TODO(srawlins): record type arguments in DartObject as well, as in
-    // [visitFunctionReference] below.
-    return _getConstantValue(node, node.constructorName.staticElement);
+    var constructorTearoffResult = DartObjectImpl(
+      typeSystem,
+      node.typeOrThrow,
+      FunctionState(node.constructorName.staticElement),
+    );
+    var typeArgumentList = node.constructorName.type.typeArguments;
+    if (typeArgumentList == null) {
+      return constructorTearoffResult;
+    } else {
+      var typeArguments = <DartType>[];
+      var typeArgumentObjects = <DartObjectImpl>[];
+      for (var typeArgument in typeArgumentList.arguments) {
+        var object = typeArgument.accept(this);
+        if (object == null) {
+          return null;
+        }
+        var typeArgumentType = object.toTypeValue();
+        if (typeArgumentType == null) {
+          return null;
+        }
+        // TODO(srawlins): Test type alias types (`typedef i = int`) used as
+        // type arguments. Possibly change implementation based on
+        // canonicalization rules.
+        typeArguments.add(typeArgumentType);
+        typeArgumentObjects.add(object);
+      }
+      // The result is already instantiated during resolution;
+      // [_dartObjectComputer.typeInstantiate] is unnecessary.
+      return DartObjectImpl(
+        typeSystem,
+        node.typeOrThrow,
+        FunctionState(node.constructorName.staticElement,
+            typeArguments: typeArgumentObjects),
+      );
+    }
   }
 
   @override
@@ -1135,7 +1167,7 @@
         typeArgumentObjects.add(object);
       }
       return _dartObjectComputer.typeInstantiate(
-          node, functionResult, typeArguments, typeArgumentObjects);
+          functionResult, typeArguments, typeArgumentObjects);
     }
   }
 
@@ -2147,7 +2179,6 @@
   }
 
   DartObjectImpl? typeInstantiate(
-    FunctionReference node,
     DartObjectImpl function,
     List<DartType> typeArguments,
     List<DartObjectImpl> typeArgumentObjects,
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index 24f2212..359885a 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -1312,7 +1312,15 @@
       if (rightElement == null) {
         return BoolState.UNKNOWN_VALUE;
       }
-      if (_element != rightElement) {
+
+      var element = _element;
+      var otherElement = rightOperand._element;
+      var elementsAreEqual = identical(element, otherElement) ||
+          (element != null &&
+              otherElement != null &&
+              otherElement.kind == element.kind &&
+              otherElement.location == element.location);
+      if (!elementsAreEqual) {
         return BoolState.FALSE_STATE;
       }
       var typeArguments = _typeArguments;
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 7a33308..b5aa73e 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -275,8 +275,6 @@
 }
 
 class LinkResult {
-  @Deprecated('This field is not used anymore')
-  final Uint8List astBytes = Uint8List(0);
   final Uint8List resolutionBytes;
 
   LinkResult({
diff --git a/pkg/analyzer/lib/src/summary2/package_bundle_format.dart b/pkg/analyzer/lib/src/summary2/package_bundle_format.dart
index f87e585..f6d3bd2 100644
--- a/pkg/analyzer/lib/src/summary2/package_bundle_format.dart
+++ b/pkg/analyzer/lib/src/summary2/package_bundle_format.dart
@@ -21,7 +21,6 @@
   }
 
   Uint8List finish({
-    @Deprecated('This parameter is not used anymore') Uint8List? astBytes,
     required Uint8List resolutionBytes,
     PackageBundleSdk? sdk,
   }) {
diff --git a/pkg/analyzer/test/id_tests/assigned_variables_test.dart b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
index ef788ba..9459ee1 100644
--- a/pkg/analyzer/test/id_tests/assigned_variables_test.dart
+++ b/pkg/analyzer/test/id_tests/assigned_variables_test.dart
@@ -24,7 +24,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest: runTestFor(
-          const _AssignedVariablesDataComputer(), [analyzerNnbdConfig]));
+          const _AssignedVariablesDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _AssignedVariablesDataComputer extends DataComputer<_Data> {
diff --git a/pkg/analyzer/test/id_tests/constant_test.dart b/pkg/analyzer/test/id_tests/constant_test.dart
index 58b19d2..10a1825 100644
--- a/pkg/analyzer/test/id_tests/constant_test.dart
+++ b/pkg/analyzer/test/id_tests/constant_test.dart
@@ -24,8 +24,8 @@
       args: args,
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
-      runTest: runTestFor(
-          const ConstantsDataComputer(), [analyzerConstantUpdate2018Config]));
+      runTest:
+          runTestFor(const ConstantsDataComputer(), [analyzerDefaultConfig]));
 }
 
 class ConstantsDataComputer extends DataComputer<String> {
diff --git a/pkg/analyzer/test/id_tests/definite_assignment_test.dart b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
index dd3fe0b..7d920ab 100644
--- a/pkg/analyzer/test/id_tests/definite_assignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_assignment_test.dart
@@ -25,7 +25,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest: runTestFor(
-          const _DefiniteAssignmentDataComputer(), [analyzerNnbdConfig]));
+          const _DefiniteAssignmentDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _DefiniteAssignmentDataComputer extends DataComputer<String> {
diff --git a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
index 7e4d258..f17d8e2 100644
--- a/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/analyzer/test/id_tests/definite_unassignment_test.dart
@@ -25,7 +25,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest: runTestFor(
-          const _DefiniteAssignmentDataComputer(), [analyzerNnbdConfig]));
+          const _DefiniteAssignmentDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _DefiniteAssignmentDataComputer extends DataComputer<String> {
diff --git a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
index 224d689..2ba48a6 100644
--- a/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_type_arguments_test.dart
@@ -22,7 +22,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest: runTestFor(
-          const _InferredTypeArgumentsDataComputer(), [analyzerNnbdConfig]));
+          const _InferredTypeArgumentsDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _InferredTypeArgumentsDataComputer extends DataComputer<List<DartType>> {
diff --git a/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart b/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
index 7f312ca..94b3771 100644
--- a/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
+++ b/pkg/analyzer/test/id_tests/inferred_variable_types_test.dart
@@ -22,7 +22,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest: runTestFor(
-          const _InferredVariableTypesDataComputer(), [analyzerNnbdConfig]));
+          const _InferredVariableTypesDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _InferredVariableTypesDataComputer extends DataComputer<DartType> {
diff --git a/pkg/analyzer/test/id_tests/inheritance_test.dart b/pkg/analyzer/test/id_tests/inheritance_test.dart
index 299ff7c..08756c3 100644
--- a/pkg/analyzer/test/id_tests/inheritance_test.dart
+++ b/pkg/analyzer/test/id_tests/inheritance_test.dart
@@ -24,7 +24,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest:
-          runTestFor(const _InheritanceDataComputer(), [analyzerNnbdConfig]),
+          runTestFor(const _InheritanceDataComputer(), [analyzerDefaultConfig]),
       skipMap: {
         analyzerMarker: [
           // These are CFE-centric tests for an opt-in/opt-out sdk.
diff --git a/pkg/analyzer/test/id_tests/nullability_test.dart b/pkg/analyzer/test/id_tests/nullability_test.dart
index 72fd2ef..0abde94 100644
--- a/pkg/analyzer/test/id_tests/nullability_test.dart
+++ b/pkg/analyzer/test/id_tests/nullability_test.dart
@@ -26,8 +26,8 @@
       args: args,
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
-      runTest:
-          runTestFor(const _NullabilityDataComputer(), [analyzerNnbdConfig]));
+      runTest: runTestFor(
+          const _NullabilityDataComputer(), [analyzerDefaultConfig]));
 }
 
 class FlowTestBase {
diff --git a/pkg/analyzer/test/id_tests/reachability_test.dart b/pkg/analyzer/test/id_tests/reachability_test.dart
index 8714082..d5b03f8 100644
--- a/pkg/analyzer/test/id_tests/reachability_test.dart
+++ b/pkg/analyzer/test/id_tests/reachability_test.dart
@@ -22,8 +22,8 @@
       args: args,
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
-      runTest:
-          runTestFor(const _ReachabilityDataComputer(), [analyzerNnbdConfig]));
+      runTest: runTestFor(
+          const _ReachabilityDataComputer(), [analyzerDefaultConfig]));
 }
 
 class FlowTestBase {
diff --git a/pkg/analyzer/test/id_tests/type_promotion_test.dart b/pkg/analyzer/test/id_tests/type_promotion_test.dart
index a5e0435..0f7f189 100644
--- a/pkg/analyzer/test/id_tests/type_promotion_test.dart
+++ b/pkg/analyzer/test/id_tests/type_promotion_test.dart
@@ -22,8 +22,8 @@
       args: args,
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
-      runTest:
-          runTestFor(const _TypePromotionDataComputer(), [analyzerNnbdConfig]));
+      runTest: runTestFor(
+          const _TypePromotionDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _TypePromotionDataComputer extends DataComputer<DartType> {
diff --git a/pkg/analyzer/test/id_tests/why_not_promoted_test.dart b/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
index 6cef947..2f8e046 100644
--- a/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
+++ b/pkg/analyzer/test/id_tests/why_not_promoted_test.dart
@@ -22,7 +22,7 @@
       createUriForFileName: createUriForFileName,
       onFailure: onFailure,
       runTest: runTestFor(
-          const _WhyNotPromotedDataComputer(), [analyzerNnbdConfig]));
+          const _WhyNotPromotedDataComputer(), [analyzerDefaultConfig]));
 }
 
 class _WhyNotPromotedDataComputer extends DataComputer<String?> {
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index ba67935..69b5497 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -24,6 +24,102 @@
 @reflectiveTest
 class ConstantVisitorTest extends ConstantVisitorTestSupport
     with ConstantVisitorTestCases {
+  test_identical_constructorReference_explicitTypeArgs_differentClasses() async {
+    await resolveTestCode('''
+class C<T> {}
+class D<T> {}
+const a = identical(C<int>.new, D<int>.new);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+  }
+
+  test_identical_constructorReference_explicitTypeArgs_differentConstructors() async {
+    await resolveTestCode('''
+class C<T> {
+  C();
+  C.named();
+}
+const a = identical(C<int>.new, C<int>.named);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+  }
+
+  test_identical_constructorReference_explicitTypeArgs_differentTypeArgs() async {
+    await resolveTestCode('''
+class C<T> {}
+const a = identical(C<int>.new, C<String>.new);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+  }
+
+  test_identical_constructorReference_explicitTypeArgs_sameElement() async {
+    await resolveTestCode('''
+class C<T> {}
+const a = identical(C<int>.new, C<int>.new);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(true),
+    );
+  }
+
+  test_identical_constructorReference_notInstantiated_differentClasses() async {
+    await resolveTestCode('''
+class C<T> {}
+class D<T> {}
+const a = identical(C.new, D.new);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+  }
+
+  test_identical_constructorReference_notInstantiated_differentConstructors() async {
+    await resolveTestCode('''
+class C<T> {
+  C();
+  C.named();
+}
+const a = identical(C.new, C.named);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+  }
+
+  test_identical_constructorReference_notInstantiated_sameElement() async {
+    await resolveTestCode('''
+class C<T> {}
+const a = identical(C.new, C.new);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(true),
+    );
+  }
+
+  test_identical_constructorReference_onlyOneHasTypeArgs() async {
+    await resolveTestCode('''
+class C<T> {}
+const a = identical(C<int>.new, C.new);
+''');
+    expect(
+      _evaluateConstant('a'),
+      _boolValue(false),
+    );
+  }
+
   test_visitAsExpression_potentialConstType() async {
     await assertNoErrorsInCode('''
 const num three = 3;
diff --git a/pkg/analyzer/test/src/dart/element/display_string_test.dart b/pkg/analyzer/test/src/dart/element/display_string_test.dart
index e5f4644..838d3c2 100644
--- a/pkg/analyzer/test/src/dart/element/display_string_test.dart
+++ b/pkg/analyzer/test/src/dart/element/display_string_test.dart
@@ -2,14 +2,10 @@
 // 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/element/type_provider.dart';
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
-import '../../../generated/test_analysis_context.dart';
+import '../../../generated/type_system_test.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -18,30 +14,7 @@
 }
 
 @reflectiveTest
-class ElementDisplayStringTest with ElementsTypesMixin {
-  late final TestAnalysisContext _analysisContext;
-
-  @override
-  late final LibraryElementImpl testLibrary;
-
-  @override
-  late final TypeProvider typeProvider;
-
-  late final TypeSystemImpl typeSystem;
-
-  void setUp() {
-    _analysisContext = TestAnalysisContext();
-    typeProvider = _analysisContext.typeProviderLegacy;
-    typeSystem = _analysisContext.typeSystemLegacy;
-
-    testLibrary = library_(
-      uriStr: 'package:test/test.dart',
-      analysisContext: _analysisContext,
-      analysisSession: _analysisContext.analysisSession,
-      typeSystem: typeSystem,
-    );
-  }
-
+class ElementDisplayStringTest extends AbstractTypeSystemTest {
   void test_longMethod() {
     final methodA = method(
       'longMethodName',
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index ad6cf9b..0ac00a2 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -9,18 +9,16 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/dart/element/type_system.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
 import 'package:analyzer/src/generated/testing/element_factory.dart';
 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
 import '../../../generated/test_analysis_context.dart';
+import '../../../generated/type_system_test.dart';
 import '../resolution/context_collection_resolution.dart';
 
 main() {
@@ -41,33 +39,8 @@
   });
 }
 
-class AbstractTypeTest with ElementsTypesMixin {
-  late final TestAnalysisContext _analysisContext;
-
-  @override
-  late final LibraryElementImpl testLibrary;
-
-  @override
-  late final TypeProvider typeProvider;
-
-  late final TypeSystemImpl typeSystem;
-
-  void setUp() {
-    _analysisContext = TestAnalysisContext();
-    typeProvider = _analysisContext.typeProviderLegacy;
-    typeSystem = _analysisContext.typeSystemLegacy;
-
-    testLibrary = library_(
-      uriStr: 'package:test/test.dart',
-      analysisContext: _analysisContext,
-      analysisSession: _analysisContext.analysisSession,
-      typeSystem: typeSystem,
-    );
-  }
-}
-
 @reflectiveTest
-class ClassElementImplTest extends AbstractTypeTest {
+class ClassElementImplTest extends AbstractTypeSystemTest {
   void test_getField() {
     var classA = class_(name: 'A');
     String fieldName = "f";
@@ -488,7 +461,7 @@
   }
 
   LibraryElementImpl _newLibrary() =>
-      ElementFactory.library(_analysisContext, 'lib');
+      ElementFactory.library(analysisContext, 'lib');
 }
 
 @reflectiveTest
@@ -539,10 +512,9 @@
 }
 
 @reflectiveTest
-class ElementImplTest extends AbstractTypeTest {
+class ElementImplTest extends AbstractTypeSystemTest {
   void test_equals() {
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     ClassElementImpl classElement = ElementFactory.classElement2("C");
     (library.definingCompilationUnit as CompilationUnitElementImpl).classes =
         <ClassElement>[classElement];
@@ -567,18 +539,17 @@
 
   void test_isAccessibleIn_private_differentLibrary() {
     LibraryElementImpl library1 =
-        ElementFactory.library(_analysisContext, "lib1");
+        ElementFactory.library(analysisContext, "lib1");
     ClassElement classElement = ElementFactory.classElement2("_C");
     (library1.definingCompilationUnit as CompilationUnitElementImpl).classes =
         <ClassElement>[classElement];
     LibraryElementImpl library2 =
-        ElementFactory.library(_analysisContext, "lib2");
+        ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isAccessibleIn(library2), isFalse);
   }
 
   void test_isAccessibleIn_private_sameLibrary() {
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     ClassElement classElement = ElementFactory.classElement2("_C");
     (library.definingCompilationUnit as CompilationUnitElementImpl).classes =
         <ClassElement>[classElement];
@@ -587,18 +558,17 @@
 
   void test_isAccessibleIn_public_differentLibrary() {
     LibraryElementImpl library1 =
-        ElementFactory.library(_analysisContext, "lib1");
+        ElementFactory.library(analysisContext, "lib1");
     ClassElement classElement = ElementFactory.classElement2("C");
     (library1.definingCompilationUnit as CompilationUnitElementImpl).classes =
         <ClassElement>[classElement];
     LibraryElementImpl library2 =
-        ElementFactory.library(_analysisContext, "lib2");
+        ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isAccessibleIn(library2), isTrue);
   }
 
   void test_isAccessibleIn_public_sameLibrary() {
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     ClassElement classElement = ElementFactory.classElement2("C");
     (library.definingCompilationUnit as CompilationUnitElementImpl).classes =
         <ClassElement>[classElement];
@@ -729,7 +699,7 @@
 }
 
 @reflectiveTest
-class FunctionTypeImplTest extends AbstractTypeTest {
+class FunctionTypeImplTest extends AbstractTypeSystemTest {
   void assertType(DartType type, String expected) {
     var typeStr = type.getDisplayString(withNullability: false);
     expect(typeStr, expected);
@@ -866,7 +836,7 @@
 }
 
 @reflectiveTest
-class InterfaceTypeImplTest extends AbstractTypeTest {
+class InterfaceTypeImplTest extends AbstractTypeSystemTest {
   void test_allSupertypes() {
     void check(InterfaceType type, List<String> expected) {
       var actual = type.allSupertypes.map((e) {
@@ -1310,8 +1280,7 @@
         ElementFactory.getterElement(getterName, false, intNone);
     classA.accessors = <PropertyAccessorElement>[getterG];
     InterfaceType typeA = interfaceTypeStar(classA);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
     expect(typeA.lookUpGetter(getterName, library), same(getterG));
@@ -1331,8 +1300,7 @@
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     InterfaceType typeB = interfaceTypeStar(classB);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[
       classA,
@@ -1366,8 +1334,7 @@
       interfaceTypeStar(classM1),
       interfaceTypeStar(classM2)
     ];
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
     unit.classes = <ClassElement>[classB, classM1, classM2, classC];
     expect(
@@ -1384,8 +1351,7 @@
     InterfaceType typeA = interfaceTypeStar(classA);
     var classB = ElementFactory.classElement("B", typeA);
     classA.supertype = interfaceTypeStar(classB);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[
       classA,
@@ -1401,8 +1367,7 @@
     //
     var classA = class_(name: 'A');
     InterfaceType typeA = interfaceTypeStar(classA);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
     expect(typeA.lookUpGetter("g", library), isNull);
@@ -1419,8 +1384,7 @@
         ElementFactory.methodElement(methodName, intNone);
     classA.methods = <MethodElement>[methodM];
     InterfaceType typeA = interfaceTypeStar(classA);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
     expect(typeA.lookUpMethod(methodName, library), same(methodM));
@@ -1440,8 +1404,7 @@
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     InterfaceType typeB = interfaceTypeStar(classB);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[
       classA,
@@ -1474,8 +1437,7 @@
       interfaceTypeStar(classM1),
       interfaceTypeStar(classM2)
     ];
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
     unit.classes = <ClassElement>[classB, classM1, classM2, classC];
     expect(
@@ -1505,8 +1467,7 @@
         typeParameterTypeStar(F),
       ]),
     );
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[A];
     //
@@ -1533,8 +1494,7 @@
     InterfaceType typeA = interfaceTypeStar(classA);
     var classB = ElementFactory.classElement("B", typeA);
     classA.supertype = interfaceTypeStar(classB);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[
       classA,
@@ -1550,8 +1510,7 @@
     //
     var classA = class_(name: 'A');
     InterfaceType typeA = interfaceTypeStar(classA);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
     expect(typeA.lookUpMethod("m", library), isNull);
@@ -1568,8 +1527,7 @@
         ElementFactory.setterElement(setterName, false, intNone);
     classA.accessors = <PropertyAccessorElement>[setterS];
     InterfaceType typeA = interfaceTypeStar(classA);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
     expect(typeA.lookUpSetter(setterName, library), same(setterS));
@@ -1589,8 +1547,7 @@
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     InterfaceType typeB = interfaceTypeStar(classB);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[
       classA,
@@ -1624,8 +1581,7 @@
       interfaceTypeStar(classM1),
       interfaceTypeStar(classM2)
     ];
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
     unit.classes = <ClassElement>[classB, classM1, classM2, classC];
     expect(
@@ -1642,8 +1598,7 @@
     InterfaceType typeA = interfaceTypeStar(classA);
     var classB = ElementFactory.classElement("B", typeA);
     classA.supertype = interfaceTypeStar(classB);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[
       classA,
@@ -1659,8 +1614,7 @@
     //
     var classA = class_(name: 'A');
     InterfaceType typeA = interfaceTypeStar(classA);
-    LibraryElementImpl library =
-        ElementFactory.library(_analysisContext, "lib");
+    LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     CompilationUnitElement unit = library.definingCompilationUnit;
     (unit as CompilationUnitElementImpl).classes = <ClassElement>[classA];
     expect(typeA.lookUpSetter("s", library), isNull);
@@ -1779,7 +1733,7 @@
 }
 
 @reflectiveTest
-class TypeParameterTypeImplTest extends AbstractTypeTest {
+class TypeParameterTypeImplTest extends AbstractTypeSystemTest {
   void test_asInstanceOf_hasBound_element() {
     var T = typeParameter('T', bound: listNone(intNone));
     _assert_asInstanceOf(
@@ -2016,7 +1970,7 @@
 }
 
 @reflectiveTest
-class VoidTypeImplTest extends AbstractTypeTest {
+class VoidTypeImplTest extends AbstractTypeSystemTest {
   /// Reference {code VoidTypeImpl.getInstance()}.
   final DartType _voidType = VoidTypeImpl.instance;
 
diff --git a/pkg/analyzer/test/src/dart/element/function_type_test.dart b/pkg/analyzer/test/src/dart/element/function_type_test.dart
index 79cf038..a685819 100644
--- a/pkg/analyzer/test/src/dart/element/function_type_test.dart
+++ b/pkg/analyzer/test/src/dart/element/function_type_test.dart
@@ -5,13 +5,11 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
-import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/generated/testing/test_type_provider.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
+import '../../../generated/type_system_test.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -24,10 +22,7 @@
 VoidTypeImpl get voidType => VoidTypeImpl.instance;
 
 @reflectiveTest
-class FunctionTypeTest with ElementsTypesMixin {
-  @override
-  final TypeProvider typeProvider = TestTypeProvider();
-
+class FunctionTypeTest extends AbstractTypeSystemTest {
   InterfaceType get intType => typeProvider.intType;
 
   ClassElement get listElement => typeProvider.listElement;
diff --git a/pkg/analyzer/test/src/dart/element/subtype_test.dart b/pkg/analyzer/test/src/dart/element/subtype_test.dart
index 89411e9..481f288 100644
--- a/pkg/analyzer/test/src/dart/element/subtype_test.dart
+++ b/pkg/analyzer/test/src/dart/element/subtype_test.dart
@@ -15,249 +15,11 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(SubtypeTest);
-    defineReflectiveTests(NonNullableSubtypingCompoundTest);
     defineReflectiveTests(SubtypingCompoundTest);
   });
 }
 
 @reflectiveTest
-class NonNullableSubtypingCompoundTest extends _SubtypingCompoundTestBase {
-  test_dynamic() {
-    var equivalents = <DartType>[
-      voidNone,
-      objectQuestion,
-      objectStar,
-    ];
-
-    var subtypes = <DartType>[
-      neverNone,
-      nullNone,
-      objectNone,
-    ];
-
-    _checkGroups(
-      dynamicNone,
-      equivalents: equivalents,
-      subtypes: subtypes,
-    );
-  }
-
-  test_futureOr_topTypes() {
-    var futureOrObject = futureOrNone(objectNone);
-    var futureOrObjectStar = futureOrNone(objectStar);
-    var futureOrObjectQuestion = futureOrNone(objectQuestion);
-
-    var futureOrStarObject = futureOrStar(objectNone);
-    var futureOrStarObjectStar = futureOrStar(objectStar);
-    var futureOrStarObjectQuestion = futureOrStar(objectQuestion);
-
-    var futureOrQuestionObject = futureOrQuestion(objectNone);
-    var futureOrQuestionObjectStar = futureOrQuestion(objectStar);
-    var futureOrQuestionObjectQuestion = futureOrQuestion(objectQuestion);
-
-    //FutureOr<Object> <: FutureOr*<Object?>
-    _checkGroups(
-      futureOrObject,
-      equivalents: [
-        objectStar,
-        futureOrObjectStar,
-        futureOrStarObject,
-        futureOrStarObjectStar,
-        objectNone,
-      ],
-      subtypes: [],
-      supertypes: [
-        objectQuestion,
-        futureOrQuestionObject,
-        futureOrObjectQuestion,
-        futureOrQuestionObject,
-        futureOrQuestionObjectStar,
-        futureOrStarObjectQuestion,
-        futureOrQuestionObjectQuestion,
-      ],
-    );
-  }
-
-  test_intNone() {
-    var equivalents = <DartType>[
-      intNone,
-      intStar,
-    ];
-
-    var subtypes = <DartType>[
-      neverNone,
-    ];
-
-    var supertypes = <DartType>[
-      intQuestion,
-      objectNone,
-      objectQuestion,
-    ];
-
-    var unrelated = <DartType>[
-      doubleNone,
-      nullNone,
-      nullStar,
-      nullQuestion,
-      neverQuestion,
-    ];
-
-    _checkGroups(
-      intNone,
-      equivalents: equivalents,
-      supertypes: supertypes,
-      unrelated: unrelated,
-      subtypes: subtypes,
-    );
-  }
-
-  test_intQuestion() {
-    var equivalents = <DartType>[
-      intQuestion,
-      intStar,
-    ];
-
-    var subtypes = <DartType>[
-      intNone,
-      nullNone,
-      nullQuestion,
-      nullStar,
-      neverNone,
-      neverQuestion,
-      neverStar,
-    ];
-
-    var supertypes = <DartType>[
-      numQuestion,
-      numStar,
-      objectQuestion,
-      objectStar,
-    ];
-
-    var unrelated = <DartType>[
-      doubleNone,
-      numNone,
-      objectNone,
-    ];
-
-    _checkGroups(
-      intQuestion,
-      equivalents: equivalents,
-      supertypes: supertypes,
-      unrelated: unrelated,
-      subtypes: subtypes,
-    );
-  }
-
-  test_intStar() {
-    var equivalents = <DartType>[
-      intNone,
-      intQuestion,
-      intStar,
-    ];
-
-    var subtypes = <DartType>[
-      nullNone,
-      nullStar,
-      nullQuestion,
-      neverNone,
-      neverStar,
-      neverQuestion,
-    ];
-
-    var supertypes = <DartType>[
-      numNone,
-      numQuestion,
-      numStar,
-      objectNone,
-      objectQuestion,
-    ];
-
-    var unrelated = <DartType>[
-      doubleStar,
-    ];
-
-    _checkGroups(
-      intStar,
-      equivalents: equivalents,
-      supertypes: supertypes,
-      unrelated: unrelated,
-      subtypes: subtypes,
-    );
-  }
-
-  test_null() {
-    var equivalents = <DartType>[
-      nullNone,
-      nullQuestion,
-      nullStar,
-      neverQuestion,
-    ];
-
-    var supertypes = <DartType>[
-      intQuestion,
-      intStar,
-      objectQuestion,
-      objectStar,
-      dynamicNone,
-      voidNone,
-    ];
-
-    var subtypes = <DartType>[
-      neverNone,
-    ];
-
-    var unrelated = <DartType>[
-      doubleNone,
-      intNone,
-      numNone,
-      objectNone,
-    ];
-
-    for (final formOfNull in equivalents) {
-      _checkGroups(
-        formOfNull,
-        equivalents: equivalents,
-        supertypes: supertypes,
-        unrelated: unrelated,
-        subtypes: subtypes,
-      );
-    }
-  }
-
-  test_object() {
-    var equivalents = <DartType>[
-      objectStar,
-    ];
-
-    var supertypes = <DartType>[
-      objectQuestion,
-      dynamicType,
-      voidNone,
-    ];
-
-    var subtypes = <DartType>[
-      neverNone,
-    ];
-
-    var unrelated = <DartType>[
-      doubleQuestion,
-      numQuestion,
-      intQuestion,
-      nullNone,
-    ];
-
-    _checkGroups(
-      objectNone,
-      equivalents: equivalents,
-      supertypes: supertypes,
-      unrelated: unrelated,
-      subtypes: subtypes,
-    );
-  }
-}
-
-@reflectiveTest
 class SubtypeTest extends _SubtypingTestBase {
   final Map<String, DartType> _types = {};
 
@@ -5814,7 +5576,7 @@
 }
 
 @reflectiveTest
-class SubtypingCompoundTest extends _SubtypingCompoundTestBase {
+class SubtypingCompoundTest extends _SubtypingTestBase {
   test_bottom_isBottom() {
     var equivalents = <DartType>[neverStar];
 
@@ -5847,6 +5609,26 @@
     );
   }
 
+  test_dynamic() {
+    var equivalents = <DartType>[
+      voidNone,
+      objectQuestion,
+      objectStar,
+    ];
+
+    var subtypes = <DartType>[
+      neverNone,
+      nullNone,
+      objectNone,
+    ];
+
+    _checkGroups(
+      dynamicNone,
+      equivalents: equivalents,
+      subtypes: subtypes,
+    );
+  }
+
   test_dynamic_isTop() {
     var equivalents = <DartType>[
       dynamicNone,
@@ -5870,6 +5652,42 @@
     );
   }
 
+  test_futureOr_topTypes() {
+    var futureOrObject = futureOrNone(objectNone);
+    var futureOrObjectStar = futureOrNone(objectStar);
+    var futureOrObjectQuestion = futureOrNone(objectQuestion);
+
+    var futureOrStarObject = futureOrStar(objectNone);
+    var futureOrStarObjectStar = futureOrStar(objectStar);
+    var futureOrStarObjectQuestion = futureOrStar(objectQuestion);
+
+    var futureOrQuestionObject = futureOrQuestion(objectNone);
+    var futureOrQuestionObjectStar = futureOrQuestion(objectStar);
+    var futureOrQuestionObjectQuestion = futureOrQuestion(objectQuestion);
+
+    //FutureOr<Object> <: FutureOr*<Object?>
+    _checkGroups(
+      futureOrObject,
+      equivalents: [
+        objectStar,
+        futureOrObjectStar,
+        futureOrStarObject,
+        futureOrStarObjectStar,
+        objectNone,
+      ],
+      subtypes: [],
+      supertypes: [
+        objectQuestion,
+        futureOrQuestionObject,
+        futureOrObjectQuestion,
+        futureOrQuestionObject,
+        futureOrQuestionObjectStar,
+        futureOrStarObjectQuestion,
+        futureOrQuestionObjectQuestion,
+      ],
+    );
+  }
+
   test_int() {
     var equivalents = <DartType>[intStar];
     var supertypes = <DartType>[numStar];
@@ -5882,6 +5700,153 @@
     );
   }
 
+  test_intNone() {
+    var equivalents = <DartType>[
+      intNone,
+      intStar,
+    ];
+
+    var subtypes = <DartType>[
+      neverNone,
+    ];
+
+    var supertypes = <DartType>[
+      intQuestion,
+      objectNone,
+      objectQuestion,
+    ];
+
+    var unrelated = <DartType>[
+      doubleNone,
+      nullNone,
+      nullStar,
+      nullQuestion,
+      neverQuestion,
+    ];
+
+    _checkGroups(
+      intNone,
+      equivalents: equivalents,
+      supertypes: supertypes,
+      unrelated: unrelated,
+      subtypes: subtypes,
+    );
+  }
+
+  test_intQuestion() {
+    var equivalents = <DartType>[
+      intQuestion,
+      intStar,
+    ];
+
+    var subtypes = <DartType>[
+      intNone,
+      nullNone,
+      nullQuestion,
+      nullStar,
+      neverNone,
+      neverQuestion,
+      neverStar,
+    ];
+
+    var supertypes = <DartType>[
+      numQuestion,
+      numStar,
+      objectQuestion,
+      objectStar,
+    ];
+
+    var unrelated = <DartType>[
+      doubleNone,
+      numNone,
+      objectNone,
+    ];
+
+    _checkGroups(
+      intQuestion,
+      equivalents: equivalents,
+      supertypes: supertypes,
+      unrelated: unrelated,
+      subtypes: subtypes,
+    );
+  }
+
+  test_intStar() {
+    var equivalents = <DartType>[
+      intNone,
+      intQuestion,
+      intStar,
+    ];
+
+    var subtypes = <DartType>[
+      nullNone,
+      nullStar,
+      nullQuestion,
+      neverNone,
+      neverStar,
+      neverQuestion,
+    ];
+
+    var supertypes = <DartType>[
+      numNone,
+      numQuestion,
+      numStar,
+      objectNone,
+      objectQuestion,
+    ];
+
+    var unrelated = <DartType>[
+      doubleStar,
+    ];
+
+    _checkGroups(
+      intStar,
+      equivalents: equivalents,
+      supertypes: supertypes,
+      unrelated: unrelated,
+      subtypes: subtypes,
+    );
+  }
+
+  test_null() {
+    var equivalents = <DartType>[
+      nullNone,
+      nullQuestion,
+      nullStar,
+      neverQuestion,
+    ];
+
+    var supertypes = <DartType>[
+      intQuestion,
+      intStar,
+      objectQuestion,
+      objectStar,
+      dynamicNone,
+      voidNone,
+    ];
+
+    var subtypes = <DartType>[
+      neverNone,
+    ];
+
+    var unrelated = <DartType>[
+      doubleNone,
+      intNone,
+      numNone,
+      objectNone,
+    ];
+
+    for (final formOfNull in equivalents) {
+      _checkGroups(
+        formOfNull,
+        equivalents: equivalents,
+        supertypes: supertypes,
+        unrelated: unrelated,
+        subtypes: subtypes,
+      );
+    }
+  }
+
   test_num() {
     var equivalents = <DartType>[numStar];
     var supertypes = <DartType>[objectStar];
@@ -5896,6 +5861,37 @@
     );
   }
 
+  test_object() {
+    var equivalents = <DartType>[
+      objectStar,
+    ];
+
+    var supertypes = <DartType>[
+      objectQuestion,
+      dynamicType,
+      voidNone,
+    ];
+
+    var subtypes = <DartType>[
+      neverNone,
+    ];
+
+    var unrelated = <DartType>[
+      doubleQuestion,
+      numQuestion,
+      intQuestion,
+      nullNone,
+    ];
+
+    _checkGroups(
+      objectNone,
+      equivalents: equivalents,
+      supertypes: supertypes,
+      unrelated: unrelated,
+      subtypes: subtypes,
+    );
+  }
+
   test_void_isTop() {
     var equivalents = <DartType>[
       dynamicNone,
@@ -5918,9 +5914,7 @@
       subtypes: subtypes,
     );
   }
-}
 
-class _SubtypingCompoundTestBase extends _SubtypingTestBase {
   void _checkEquivalent(DartType type1, DartType type2) {
     _checkIsSubtypeOf(type1, type2);
     _checkIsSubtypeOf(type2, type1);
diff --git a/pkg/analyzer/test/src/dart/element/type_visitor_test.dart b/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
index e17064f..67de862 100644
--- a/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/element/type_visitor_test.dart
@@ -8,7 +8,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import 'element_test.dart';
+import '../../../generated/type_system_test.dart';
 
 main() {
   defineReflectiveSuite(() {
@@ -17,7 +17,7 @@
 }
 
 @reflectiveTest
-class RecursiveTypeVisitorTest extends AbstractTypeTest {
+class RecursiveTypeVisitorTest extends AbstractTypeSystemTest {
   late final _MockRecursiveVisitor visitor;
 
   @override
diff --git a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
index 1c5c4b3..e8c7840 100644
--- a/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/ast_rewrite_test.dart
@@ -463,7 +463,7 @@
     assertTypeNull(override);
     assertTypeNull(override.extensionName);
 
-    assertElementTypeStrings(
+    assertElementTypes(
       override.typeArgumentTypes,
       expectedTypeArguments,
     );
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index 9a5e9bf..9dcfa57 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -5,7 +5,6 @@
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
 import 'context_collection_resolution.dart';
 
 main() {
@@ -15,8 +14,7 @@
 }
 
 @reflectiveTest
-class ClassAliasDriverResolutionTest extends PubPackageResolutionTest
-    with ElementsTypesMixin {
+class ClassAliasDriverResolutionTest extends PubPackageResolutionTest {
   test_defaultConstructor() async {
     await assertNoErrorsInCode(r'''
 class A {}
@@ -42,8 +40,8 @@
     assertTypeName(findNode.typeName('C;'), findElement.class_('C'), 'C');
 
     assertType(x.supertype, 'A');
-    assertElementTypeStrings(x.mixins, ['B']);
-    assertElementTypeStrings(x.interfaces, ['C']);
+    assertElementTypes(x.mixins, ['B']);
+    assertElementTypes(x.interfaces, ['C']);
   }
 
   test_element_typeFunction_extends() async {
@@ -61,16 +59,8 @@
 class B {}
 class X = Object with A implements A, Function, B;
 ''');
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
     var x = findElement.class_('X');
-    assertElementTypes(
-      x.interfaces,
-      [
-        interfaceTypeNone(a),
-        interfaceTypeNone(b),
-      ],
-    );
+    assertElementTypes(x.interfaces, ['A', 'B']);
   }
 
   test_element_typeFunction_with() async {
@@ -79,16 +69,8 @@
 class B {}
 class X = Object with A, Function, B;
 ''');
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
     var x = findElement.class_('X');
-    assertElementTypes(
-      x.mixins,
-      [
-        interfaceTypeNone(a),
-        interfaceTypeNone(b),
-      ],
-    );
+    assertElementTypes(x.mixins, ['A', 'B']);
   }
 
   test_implicitConstructors_const() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 0dd6db7..2828f29 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -7,7 +7,6 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
 import 'context_collection_resolution.dart';
 
 main() {
@@ -17,8 +16,7 @@
 }
 
 @reflectiveTest
-class ClassDriverResolutionTest extends PubPackageResolutionTest
-    with ElementsTypesMixin {
+class ClassDriverResolutionTest extends PubPackageResolutionTest {
   test_element_allSupertypes() async {
     await assertNoErrorsInCode(r'''
 class A {}
@@ -34,37 +32,25 @@
 class X5 extends A with B, C implements D, E {}
 ''');
 
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
-    var c = findElement.class_('C');
-    var d = findElement.class_('D');
-    var e = findElement.class_('E');
-
-    var typeA = interfaceTypeNone(a);
-    var typeB = interfaceTypeNone(b);
-    var typeC = interfaceTypeNone(c);
-    var typeD = interfaceTypeNone(d);
-    var typeE = interfaceTypeNone(e);
-
     assertElementTypes(
       findElement.class_('X1').allSupertypes,
-      [typeA, objectType],
+      ['Object', 'A'],
     );
     assertElementTypes(
       findElement.class_('X2').allSupertypes,
-      [objectType, typeB],
+      ['Object', 'B'],
     );
     assertElementTypes(
       findElement.class_('X3').allSupertypes,
-      [typeA, objectType, typeB],
+      ['Object', 'A', 'B'],
     );
     assertElementTypes(
       findElement.class_('X4').allSupertypes,
-      [typeA, typeB, objectType, typeC],
+      ['Object', 'A', 'B', 'C'],
     );
     assertElementTypes(
       findElement.class_('X5').allSupertypes,
-      [typeA, typeB, typeC, objectType, typeD, typeE],
+      ['Object', 'A', 'B', 'C', 'D', 'E'],
     );
   }
 
@@ -79,33 +65,17 @@
 class X3 extends C<double> {}
 ''');
 
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
-    var c = findElement.class_('C');
     assertElementTypes(
       findElement.class_('X1').allSupertypes,
-      [
-        interfaceTypeNone(a, typeArguments: [stringType]),
-        objectType
-      ],
+      ['Object', 'A<String>'],
     );
     assertElementTypes(
       findElement.class_('X2').allSupertypes,
-      [
-        interfaceTypeNone(b, typeArguments: [
-          stringType,
-          interfaceTypeNone(listElement, typeArguments: [intType])
-        ]),
-        objectType
-      ],
+      ['Object', 'B<String, List<int>>'],
     );
     assertElementTypes(
       findElement.class_('X3').allSupertypes,
-      [
-        interfaceTypeNone(c, typeArguments: [doubleType]),
-        interfaceTypeNone(b, typeArguments: [intType, doubleType]),
-        objectType
-      ],
+      ['Object', 'B<int, double>', 'C<double>'],
     );
   }
 
@@ -122,12 +92,9 @@
       error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 48, 1),
     ]);
 
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
-    var c = findElement.class_('C');
     assertElementTypes(
       findElement.class_('X').allSupertypes,
-      [interfaceTypeNone(a), interfaceTypeNone(b), interfaceTypeNone(c)],
+      ['A', 'B', 'C'],
     );
   }
 
@@ -149,15 +116,10 @@
 ''', [
       error(HintCode.DEPRECATED_MIXIN_FUNCTION, 53, 8),
     ]);
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
-    var c = findElement.class_('C');
+
     assertElementTypes(
-      c.mixins,
-      [
-        interfaceTypeNone(a),
-        interfaceTypeNone(b),
-      ],
+      findElement.class_('C').mixins,
+      ['A', 'B'],
     );
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/macro_test.dart b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
index c4607c4..6d88fd7 100644
--- a/pkg/analyzer/test/src/dart/resolution/macro_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
@@ -11,7 +11,6 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
 import 'context_collection_resolution.dart';
 
 main() {
@@ -21,8 +20,7 @@
 }
 
 @reflectiveTest
-class MacroResolutionTest extends PubPackageResolutionTest
-    with ElementsTypesMixin {
+class MacroResolutionTest extends PubPackageResolutionTest {
   @override
   void setUp() {
     super.setUp();
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index ee9aabd..5a1ce26 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -2,13 +2,11 @@
 // 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/element/nullability_suffix.dart';
 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/elements_types_mixin.dart';
 import 'context_collection_resolution.dart';
 
 main() {
@@ -18,8 +16,7 @@
 }
 
 @reflectiveTest
-class MixinDriverResolutionTest extends PubPackageResolutionTest
-    with ElementsTypesMixin {
+class MixinDriverResolutionTest extends PubPackageResolutionTest {
   test_accessor_getter() async {
     await assertNoErrorsInCode(r'''
 mixin M {
@@ -94,7 +91,7 @@
     var mElement = findElement.mixin('M');
 
     var aElement = findElement.class_('A');
-    assertElementTypes(aElement.mixins, [interfaceTypeNone(mElement)]);
+    assertElementTypes(aElement.mixins, ['M']);
 
     var mRef = findNode.typeName('M {} // A');
     assertTypeName(mRef, mElement, 'M');
@@ -109,7 +106,7 @@
     var mElement = findElement.mixin('M');
 
     var aElement = findElement.class_('A');
-    assertElementTypes(aElement.mixins, [interfaceTypeNone(mElement)]);
+    assertElementTypes(aElement.mixins, ['M']);
 
     var mRef = findNode.typeName('M;');
     assertTypeName(mRef, mElement, 'M');
@@ -144,10 +141,13 @@
     expect(element.isEnum, isFalse);
     expect(element.isMixin, isTrue);
     expect(element.isMixinApplication, isFalse);
-    expect(interfaceTypeStar(element).isDartCoreObject, isFalse);
+    expect(element.thisType.isDartCoreObject, isFalse);
     expect(element.isDartCoreObject, isFalse);
 
-    assertElementTypes(element.superclassConstraints, [objectType]);
+    assertElementTypes(
+      element.superclassConstraints,
+      ['Object'],
+    );
     assertElementTypes(element.interfaces, []);
   }
 
@@ -161,21 +161,13 @@
 mixin M2 on A implements B, C {}
 ''');
 
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
-    var c = findElement.class_('C');
     assertElementTypes(
       findElement.mixin('M1').allSupertypes,
-      [interfaceTypeNone(a), interfaceTypeNone(b), objectType],
+      ['Object', 'A', 'B'],
     );
     assertElementTypes(
       findElement.mixin('M2').allSupertypes,
-      [
-        interfaceTypeNone(a),
-        objectType,
-        interfaceTypeNone(b),
-        interfaceTypeNone(c)
-      ],
+      ['Object', 'A', 'B', 'C'],
     );
   }
 
@@ -188,22 +180,13 @@
 mixin M2 on B<String> {}
 ''');
 
-    var a = findElement.class_('A');
-    var b = findElement.class_('B');
     assertElementTypes(
       findElement.mixin('M1').allSupertypes,
-      [
-        interfaceTypeNone(a, typeArguments: [intType, doubleType]),
-        objectType
-      ],
+      ['Object', 'A<int, double>'],
     );
     assertElementTypes(
       findElement.mixin('M2').allSupertypes,
-      [
-        interfaceTypeNone(b, typeArguments: [stringType]),
-        interfaceTypeNone(a, typeArguments: [intType, stringType]),
-        objectType
-      ],
+      ['Object', 'A<int, String>', 'B<String>'],
     );
   }
 
@@ -323,7 +306,7 @@
     var randomElement = mathImport.importedLibrary!.getType('Random')!;
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, [interfaceTypeNone(randomElement)]);
+    assertElementTypes(element.interfaces, ['Random']);
 
     var typeRef = findNode.typeName('Random {}');
     assertTypeName(typeRef, randomElement, 'Random',
@@ -338,7 +321,7 @@
     ]);
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, [intType]);
+    assertElementTypes(element.interfaces, ['int']);
 
     var typeRef = findNode.typeName('int {}');
     assertTypeName(typeRef, intElement, 'int');
@@ -846,9 +829,7 @@
     var randomElement = mathImport.importedLibrary!.getType('Random')!;
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, [
-      interfaceTypeNone(randomElement),
-    ]);
+    assertElementTypes(element.superclassConstraints, ['Random']);
 
     var typeRef = findNode.typeName('Random {}');
     assertTypeName(typeRef, randomElement, 'Random',
@@ -864,7 +845,7 @@
     ]);
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, [intType]);
+    assertElementTypes(element.superclassConstraints, ['int']);
 
     var typeRef = findNode.typeName('int {}');
     assertTypeName(typeRef, intElement, 'int');
@@ -879,7 +860,7 @@
     ]);
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, [objectType]);
+    assertElementTypes(element.superclassConstraints, ['Object']);
 
     var typeRef = findNode.typeName('dynamic {}');
     assertTypeName(typeRef, dynamicElement, 'dynamic');
@@ -895,7 +876,7 @@
     ]);
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, [objectType]);
+    assertElementTypes(element.superclassConstraints, ['Object']);
 
     var typeRef = findNode.typeName('E {}');
     assertTypeName(typeRef, findElement.enum_('E'), 'E');
@@ -911,7 +892,7 @@
     ]);
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, [objectType]);
+    assertElementTypes(element.superclassConstraints, ['Object']);
 
     var typeRef = findNode.typeName('void {}');
     assertTypeName(typeRef, null, 'void');
@@ -923,11 +904,8 @@
 mixin B on A {} // ref
 ''');
 
-    var a = findElement.mixin('A');
     var b = findElement.mixin('B');
-    assertElementTypes(b.superclassConstraints, [
-      interfaceTypeNone(a),
-    ]);
+    assertElementTypes(b.superclassConstraints, ['A']);
   }
 
   test_error_undefinedSuperMethod() async {
@@ -995,16 +973,7 @@
 ''');
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.interfaces, [
-      findElement.class_('A').instantiate(
-        typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.none,
-      ),
-      findElement.class_('B').instantiate(
-        typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.none,
-      ),
-    ]);
+    assertElementTypes(element.interfaces, ['A', 'B']);
 
     var aRef = findNode.typeName('A, ');
     assertTypeName(aRef, findElement.class_('A'), 'A');
@@ -1092,16 +1061,7 @@
 ''');
 
     var element = findElement.mixin('M');
-    assertElementTypes(element.superclassConstraints, [
-      findElement.class_('A').instantiate(
-        typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.none,
-      ),
-      findElement.class_('B').instantiate(
-        typeArguments: const [],
-        nullabilitySuffix: NullabilitySuffix.none,
-      ),
-    ]);
+    assertElementTypes(element.superclassConstraints, ['A', 'B']);
 
     var aRef = findNode.typeName('A, ');
     assertTypeName(aRef, findElement.class_('A'), 'A');
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index 9a340186..842b8022 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -265,21 +265,18 @@
     expect(str, expected);
   }
 
-  void assertElementTypes(List<DartType> types, List<DartType> expected,
+  void assertElementTypes(List<DartType>? types, List<String> expected,
       {bool ordered = false}) {
-    if (ordered) {
-      expect(types, expected);
-    } else {
-      expect(types, unorderedEquals(expected));
-    }
-  }
-
-  void assertElementTypeStrings(List<DartType>? types, List<String> expected) {
     if (types == null) {
       fail('Expected types, actually null.');
     }
 
-    expect(types.map(typeString).toList(), expected);
+    var typeStrList = types.map(typeString).toList();
+    if (ordered) {
+      expect(typeStrList, expected);
+    } else {
+      expect(typeStrList, unorderedEquals(expected));
+    }
   }
 
   void assertEnclosingElement(Element element, Element expectedEnclosing) {
@@ -346,7 +343,7 @@
   }) {
     assertElement(node, element);
     assertType(node.extendedType, extendedType);
-    assertElementTypeStrings(node.typeArgumentTypes, typeArgumentTypes);
+    assertElementTypes(node.typeArgumentTypes, typeArgumentTypes);
   }
 
   void assertFunctionExpressionInvocation(
@@ -766,7 +763,7 @@
     required List<String> typeArguments,
   }) {
     assertElement2(type.alias?.element, declaration: element);
-    assertElementTypeStrings(type.alias?.typeArguments, typeArguments);
+    assertElementTypes(type.alias?.typeArguments, typeArguments);
   }
 
   /// Assert that the given [identifier] is a reference to a type alias, in the
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
index 5ba77c9..8711811 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
@@ -371,7 +371,7 @@
 ''');
     var override = findNode.extensionOverride('E<num>(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['num']);
+    assertElementTypes(override.typeArgumentTypes, ['num']);
     assertType(override.extendedType, 'A<num>');
 
     var propertyAccess = findNode.propertyAccess('.foo');
@@ -397,7 +397,7 @@
 ''');
     var override = findNode.extensionOverride('E<num>(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['num']);
+    assertElementTypes(override.typeArgumentTypes, ['num']);
     assertType(override.extendedType, 'A<num>');
 
     // TODO(scheglov) We need to instantiate "foo" fully.
@@ -450,7 +450,7 @@
 ''');
     var override = findNode.extensionOverride('E<num>(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['num']);
+    assertElementTypes(override.typeArgumentTypes, ['num']);
     assertType(override.extendedType, 'A<num>');
 
     assertAssignment(
@@ -489,7 +489,7 @@
       error(CompileTimeErrorCode.COULD_NOT_INFER, 69, 1),
     ]);
     var override = findNode.extensionOverride('E(s)');
-    assertElementTypeStrings(override.typeArgumentTypes, ['String']);
+    assertElementTypes(override.typeArgumentTypes, ['String']);
     assertType(override.extendedType, 'String');
   }
 
@@ -507,7 +507,7 @@
 ''');
     var override = findNode.extensionOverride('E(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+    assertElementTypes(override.typeArgumentTypes, ['int']);
     assertType(override.extendedType, 'A<int>');
 
     var propertyAccess = findNode.propertyAccess('.foo');
@@ -533,7 +533,7 @@
 ''');
     var override = findNode.extensionOverride('E(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+    assertElementTypes(override.typeArgumentTypes, ['int']);
     assertType(override.extendedType, 'A<int>');
 
     // TODO(scheglov) We need to instantiate "foo" fully.
@@ -565,7 +565,7 @@
 ''');
     var override = findNode.extensionOverride('E(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+    assertElementTypes(override.typeArgumentTypes, ['int']);
     assertType(override.extendedType, 'A<int>');
 
     var propertyAccess = findNode.propertyAccess('foo;');
@@ -591,7 +591,7 @@
 ''');
     var override = findNode.extensionOverride('E(a)');
     assertElement(override, findElement.extension_('E'));
-    assertElementTypeStrings(override.typeArgumentTypes, ['int']);
+    assertElementTypes(override.typeArgumentTypes, ['int']);
     assertType(override.extendedType, 'A<int>');
 
     assertAssignment(
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
index 27c24a5..85fe012 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/tear_off_test.dart
@@ -145,7 +145,7 @@
     assertElement(id, element);
     assertType(id, type);
     if (typeArguments != null) {
-      assertElementTypeStrings(id.tearOffTypeArgumentTypes, typeArguments);
+      assertElementTypes(id.tearOffTypeArgumentTypes, typeArguments);
     } else {
       expect(id.tearOffTypeArgumentTypes, isNull);
     }
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index b1317f0c..aeb8011 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -26,14 +26,9 @@
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 
-/// Test configuration used for testing the analyzer with constant evaluation.
-final TestConfig analyzerConstantUpdate2018Config = TestConfig(
-    analyzerMarker, 'analyzer with constant-update-2018',
-    featureSet: FeatureSet.latestLanguageVersion());
-
-/// Test configuration used for testing the analyzer with NNBD.
-final TestConfig analyzerNnbdConfig = TestConfig(
-    analyzerMarker, 'analyzer with NNBD',
+/// Test configuration used for testing the analyzer without experiments.
+final TestConfig analyzerDefaultConfig = TestConfig(
+    analyzerMarker, 'analyzer without experiments',
     featureSet: FeatureSet.latestLanguageVersion());
 
 /// A fake absolute directory used as the root of a memory-file system in ID
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index fd398ed..ac77675 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -22,8 +22,8 @@
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(DartEditBuilderImpl_PreNullSafetyTest);
     defineReflectiveTests(DartEditBuilderImpl_WithNullSafetyTest);
+    defineReflectiveTests(DartEditBuilderImpl_WithoutNullSafetyTest);
     defineReflectiveTests(DartFileEditBuilderImplTest);
     defineReflectiveTests(DartLinkedEditBuilderImplTest);
     defineReflectiveTests(ImportLibraryTest);
@@ -32,7 +32,34 @@
 }
 
 @reflectiveTest
-class DartEditBuilderImpl_PreNullSafetyTest extends DartEditBuilderImplTest {
+class DartEditBuilderImpl_WithNullSafetyTest extends DartEditBuilderImplTest {
+  Future<void> test_writeParameter_required_keyword() async {
+    var path = convertPath('$testPackageRootPath/lib/test.dart');
+    var content = 'class A {}';
+    addSource(path, content);
+
+    var builder = newBuilder();
+    await builder.addDartFileEdit(path, (builder) {
+      builder.addInsertion(content.length - 1, (builder) {
+        builder.writeParameter('a', isRequiredNamed: true);
+      });
+    });
+    var edit = getEdit(builder);
+    expect(edit.replacement, equalsIgnoringWhitespace('required a'));
+  }
+
+  Future<void> test_writeType_Never_none() async {
+    await _assertWriteType('Never');
+  }
+
+  Future<void> test_writeType_Never_question() async {
+    await _assertWriteType('Never?');
+  }
+}
+
+@reflectiveTest
+class DartEditBuilderImpl_WithoutNullSafetyTest extends DartEditBuilderImplTest
+    with WithoutNullSafetyMixin {
   Future<void> test_writeParameter_covariantAndRequired() async {
     var path = convertPath('$testPackageRootPath/lib/test.dart');
     var content = 'class A {}';
@@ -90,33 +117,6 @@
   }
 }
 
-@reflectiveTest
-class DartEditBuilderImpl_WithNullSafetyTest extends DartEditBuilderImplTest
-    with WithNullSafetyMixin {
-  Future<void> test_writeParameter_required_keyword() async {
-    var path = convertPath('$testPackageRootPath/lib/test.dart');
-    var content = 'class A {}';
-    addSource(path, content);
-
-    var builder = newBuilder();
-    await builder.addDartFileEdit(path, (builder) {
-      builder.addInsertion(content.length - 1, (builder) {
-        builder.writeParameter('a', isRequiredNamed: true);
-      });
-    });
-    var edit = getEdit(builder);
-    expect(edit.replacement, equalsIgnoringWhitespace('required a'));
-  }
-
-  Future<void> test_writeType_Never_none() async {
-    await _assertWriteType('Never');
-  }
-
-  Future<void> test_writeType_Never_question() async {
-    await _assertWriteType('Never?');
-  }
-}
-
 class DartEditBuilderImplTest extends AbstractContextTest
     with DartChangeBuilderMixin {
   @override
diff --git a/pkg/analyzer_plugin/test/support/abstract_context.dart b/pkg/analyzer_plugin/test/support/abstract_context.dart
index 6d58ad9..33577e7 100644
--- a/pkg/analyzer_plugin/test/support/abstract_context.dart
+++ b/pkg/analyzer_plugin/test/support/abstract_context.dart
@@ -11,7 +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/experiments.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
 import 'package:analyzer/src/test_utilities/mock_packages.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
@@ -51,7 +50,7 @@
   String get testPackageAnalysisOptionsPath =>
       convertPath('$testPackageRootPath/analysis_options.yaml');
 
-  String? get testPackageLanguageVersion => '2.9';
+  String? get testPackageLanguageVersion => null;
 
   /// The file system-specific `pubspec.yaml` path.
   String get testPackagePubspecPath =>
@@ -162,25 +161,9 @@
   }
 }
 
-mixin WithNonFunctionTypeAliasesMixin on AbstractContextTest {
+mixin WithoutNullSafetyMixin on AbstractContextTest {
   @override
-  String? get testPackageLanguageVersion => null;
-
-  @override
-  void setUp() {
-    super.setUp();
-
-    createAnalysisOptionsFile(
-      experiments: [
-        EnableString.nonfunction_type_aliases,
-      ],
-    );
-  }
-}
-
-mixin WithNullSafetyMixin on AbstractContextTest {
-  @override
-  String? get testPackageLanguageVersion => null;
+  String? get testPackageLanguageVersion => '2.9';
 }
 
 /// Wraps the given [_ElementVisitorFunction] into an instance of
diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
index 75d5a34..6b5ada3 100644
--- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart
@@ -19,41 +19,12 @@
 import '../support/abstract_single_unit.dart';
 
 void main() {
-  defineReflectiveTests(AnalyzerConverterNullableTest);
   defineReflectiveTests(AnalyzerConverterTest);
+  defineReflectiveTests(AnalyzerConverterWithoutNullSafetyTest);
 }
 
 @reflectiveTest
-class AnalyzerConverterNullableTest extends _AnalyzerConverterTest {
-  Future<void> test_convertElement_method() async {
-    await resolveTestCode('''
-class A {
-  static List<String> myMethod(int a, {String b, int c}) {
-    return [];
-  }
-}''');
-    var engineElement = findElement.method('myMethod');
-    // create notification Element
-    var element = converter.convertElement(engineElement);
-    expect(element.kind, plugin.ElementKind.METHOD);
-    expect(element.name, 'myMethod');
-    {
-      var location = element.location!;
-      expect(location.file, testFile);
-      expect(location.offset, 32);
-      expect(location.length, 'myGetter'.length);
-      expect(location.startLine, 2);
-      expect(location.startColumn, 23);
-    }
-    expect(element.parameters, '(int a, {String b, int c})');
-    expect(element.returnType, 'List<String>');
-    expect(element.flags, plugin.Element.FLAG_STATIC);
-  }
-}
-
-@reflectiveTest
-class AnalyzerConverterTest extends _AnalyzerConverterTest
-    with WithNonFunctionTypeAliasesMixin {
+class AnalyzerConverterTest extends _AnalyzerConverterTest {
   /// Assert that the given [pluginError] matches the given [analyzerError].
   void assertError(
       plugin.AnalysisError pluginError, analyzer.AnalysisError analyzerError,
@@ -664,6 +635,35 @@
   }
 }
 
+@reflectiveTest
+class AnalyzerConverterWithoutNullSafetyTest extends _AnalyzerConverterTest
+    with WithoutNullSafetyMixin {
+  Future<void> test_convertElement_method() async {
+    await resolveTestCode('''
+class A {
+  static List<String> myMethod(int a, {String b, int c}) {
+    return [];
+  }
+}''');
+    var engineElement = findElement.method('myMethod');
+    // create notification Element
+    var element = converter.convertElement(engineElement);
+    expect(element.kind, plugin.ElementKind.METHOD);
+    expect(element.name, 'myMethod');
+    {
+      var location = element.location!;
+      expect(location.file, testFile);
+      expect(location.offset, 32);
+      expect(location.length, 'myGetter'.length);
+      expect(location.startLine, 2);
+      expect(location.startColumn, 23);
+    }
+    expect(element.parameters, '(int a, {String b, int c})');
+    expect(element.returnType, 'List<String>');
+    expect(element.flags, plugin.Element.FLAG_STATIC);
+  }
+}
+
 class _AnalyzerConverterTest extends AbstractSingleUnitTest {
   AnalyzerConverter converter = AnalyzerConverter();
   late analyzer.Source source;
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 3813dd0..78b64cb 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -34,7 +34,7 @@
 void f() {
   g(0, 1, c: 2);
 }
-void g(int a, int b, {int c}) {}
+void g(int a, int b, {int? c}) {}
 ''');
     _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
   }
@@ -44,7 +44,7 @@
 void f() {
   g(0, 1, c: 2, );
 }
-void g(int a, int b, {int c}) {}
+void g(int a, int b, {int? c}) {}
 ''');
     _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
   }
@@ -54,7 +54,7 @@
 void f() {
   g(a: 0, b: 1, c: 2);
 }
-void g({int a, int b, int c}) {}
+void g({int? a, int? b, int? c}) {}
 ''');
     _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
   }
@@ -64,7 +64,7 @@
 void f() {
   g(a: 0, b: 1, c: 2, );
 }
-void g({int a, int b, int c}) {}
+void g({int? a, int? b, int? c}) {}
 ''');
     _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
   }
@@ -154,7 +154,7 @@
 void f() {
   g(a: 0);
 }
-void g({int a}) {}
+void g({int? a}) {}
 ''');
     _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
   }
@@ -220,7 +220,7 @@
 void f() {
   g(a: 1, b: 2);
 }
-void g({int a, int b}) {}
+void g({int? a, int? b}) {}
 ''');
     var list = _argumentList;
     expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
@@ -242,7 +242,7 @@
 void f() {
   g(a: 1, b: 2);
 }
-void g({int a, int b}) {}
+void g({int? a, int? b}) {}
 ''');
     var list = _argumentList;
     expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
@@ -264,7 +264,7 @@
 void f() {
   g(a: 1, b: 2, c: 3);
 }
-void g({int a, int b, int c}) {}
+void g({int? a, int? b, int? c}) {}
 ''');
     var list = _argumentList;
     expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
@@ -286,7 +286,7 @@
 void f() {
   g(a: 1);
 }
-void g({int a}) {}
+void g({int? a}) {}
 ''');
     var list = _argumentList;
     expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
@@ -297,7 +297,7 @@
 void f() {
   g(a: 1,);
 }
-void g({int a}) {}
+void g({int? a}) {}
 ''');
     var list = _argumentList;
     expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
diff --git a/runtime/observatory/lib/src/models/objects/library.dart b/runtime/observatory/lib/src/models/objects/library.dart
index b02a97d..dfb3f84 100644
--- a/runtime/observatory/lib/src/models/objects/library.dart
+++ b/runtime/observatory/lib/src/models/objects/library.dart
@@ -41,5 +41,5 @@
   LibraryRef get target;
 
   /// [optional]
-  String get prefix;
+  String? get prefix;
 }
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index df4a4cd..9878a02 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -2479,7 +2479,7 @@
 class LibraryDependency implements M.LibraryDependency {
   final bool isImport;
   final bool isDeferred;
-  final String prefix;
+  final String? prefix;
   final Library target;
 
   bool get isExport => !isImport;
diff --git a/runtime/observatory/tests/service/constructor_tear_off_test.dart b/runtime/observatory/tests/service/constructor_tear_off_test.dart
new file mode 100644
index 0000000..672a1a1
--- /dev/null
+++ b/runtime/observatory/tests/service/constructor_tear_off_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+// @dart=2.15
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import 'package:observatory/service_common.dart';
+import 'package:test/test.dart';
+
+import 'test_helper.dart';
+
+class Foo {
+  Foo();
+  Foo.named();
+}
+
+class Generic<T> {
+  Generic();
+}
+
+@pragma('vm:entry-point')
+Function getNamedConstructorTearoff() => Foo.named;
+
+@pragma('vm:entry-point')
+Function getDefaultConstructorTearoff() => Foo.new;
+
+@pragma('vm:entry-point')
+Function getGenericConstructorTearoff() => Generic<int>.new;
+
+Future<void> invokeConstructorTearoff(
+  Isolate isolate,
+  String name,
+  String expectedType,
+) async {
+  final lib = await isolate.rootLibrary.load() as Library;
+  final tearoff = await isolate.invokeRpc('invoke', {
+    'targetId': lib.id,
+    'selector': name,
+    'argumentIds': [],
+  });
+  final result = await isolate.invokeRpc('invoke', {
+    'targetId': tearoff.id,
+    'selector': 'call',
+    'argumentIds': [],
+  }) as Instance;
+  expect(result.clazz!.name, expectedType);
+}
+
+final tests = <IsolateTest>[
+  (Isolate isolate) => invokeConstructorTearoff(
+        isolate,
+        'getNamedConstructorTearoff',
+        'Foo',
+      ),
+  (Isolate isolate) => invokeConstructorTearoff(
+        isolate,
+        'getDefaultConstructorTearoff',
+        'Foo',
+      ),
+  (Isolate isolate) => invokeConstructorTearoff(
+        isolate,
+        'getGenericConstructorTearoff',
+        'Generic',
+      ),
+];
+
+void main(List<String> args) => runIsolateTests(
+      args,
+      tests,
+    );
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 1b05ac5..9c5acd8 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4283,10 +4283,17 @@
       // Skipping a few paths to avoid double counting:
       // (deleted) - memfd dual mapping in Dart heap
       // [heap] - sbrk area, should already included with malloc
-      // <empty> - anonymous mappings, mostly in Dart heap
+      // <empty> - anonymous mappings, mostly in Dart heap (Linux)
+      // [anon:dart-*] - as labelled (Android)
       if ((strcmp(property, "Rss:") == 0) && (size != 0) &&
           (strcmp(path, "(deleted)") != 0) && (strcmp(path, "[heap]") != 0) &&
-          (strcmp(path, "") != 0)) {
+          (strcmp(path, "") != 0) &&
+          (strcmp(path, "[anon:dart-newspace]") != 0) &&
+          (strcmp(path, "[anon:dart-oldspace]") != 0) &&
+          (strcmp(path, "[anon:dart-codespace]") != 0) &&
+          (strcmp(path, "[anon:dart-profiler]") != 0) &&
+          (strcmp(path, "[anon:dart-timeline]") != 0) &&
+          (strcmp(path, "[anon:dart-zone]") != 0)) {
         bool updated = false;
         for (intptr_t i = 0; i < mappings.length(); i++) {
           if (strcmp(mappings[i].path, path) == 0) {
diff --git a/runtime/vm/virtual_memory_posix.cc b/runtime/vm/virtual_memory_posix.cc
index f5fa5ac..3191878 100644
--- a/runtime/vm/virtual_memory_posix.cc
+++ b/runtime/vm/virtual_memory_posix.cc
@@ -15,6 +15,10 @@
 #include <sys/syscall.h>
 #include <unistd.h>
 
+#if defined(DART_HOST_OS_ANDROID)
+#include <sys/prctl.h>
+#endif
+
 #include "platform/assert.h"
 #include "platform/utils.h"
 #include "vm/heap/pages.h"
@@ -433,6 +437,10 @@
     return nullptr;
   }
 
+#if defined(DART_HOST_OS_ANDROID)
+  prctl(PR_SET_VMA, PR_SET_VMA_ANON_NAME, address, size, name);
+#endif
+
   MemoryRegion region(reinterpret_cast<void*>(address), size);
   return new VirtualMemory(region, region);
 }
diff --git a/tools/VERSION b/tools/VERSION
index 783443a..5845878 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 103
+PRERELEASE 104
 PRERELEASE_PATCH 0
\ No newline at end of file