diff --git a/CHANGELOG.md b/CHANGELOG.md
index acdb3ff..3c521f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -114,8 +114,9 @@
 
 #### Linter
 
-Updated the Linter to `1.21.2`, which includes changes that
+Updated the Linter to `1.22.0`, which includes changes that
 
+- fixes null-safe variance exceptions in `invariant_booleans`
 - updates `depend_on_referenced_packages` to treat `flutter_gen` as a virtual
   package, not needing an explicit dependency.
 - updates `unnecessary_null_checks` and
diff --git a/DEPS b/DEPS
index 98aeeab..7447d02 100644
--- a/DEPS
+++ b/DEPS
@@ -39,14 +39,14 @@
 
   # Checked-in SDK version. The checked-in SDK is a Dart SDK distribution in a
   # cipd package used to run Dart scripts in the build and test infrastructure.
-  "sdk_tag": "version:2.15.1",
+  "sdk_tag": "version:2.16.2",
 
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
-  "co19_rev": "74ba459aecc908d5db91531f020a3f74e9aa1b4d",
+  "co19_rev": "7baaec7cf49188b92ceed2af98beb1caf8939756",
   # This line prevents conflicts when both packages are rolled simultaneously.
-  "co19_2_rev": "995745937abffe9fc3a6441f9f0db27b2d706e4c",
+  "co19_2_rev": "b2034a17609472e374623f3dbe0efd9f5cb258af",
 
   # The internal benchmarks to use. See go/dart-benchmarks-internal
   "benchmarks_internal_rev": "076df10d9b77af337f2d8029725787155eb1cd52",
@@ -77,7 +77,7 @@
 
   # Revisions of /third_party/* dependencies.
   "args_rev": "3b3f55766af13d895d2020ec001a28e8dc147f91",
-  "async_rev": "80886150a5e6c58006c8ae5a6c2aa7108638e2a9",
+  "async_rev": "b18c73e981ca5f533fdc19a5b5c9db0aaf21eccf",
   "bazel_worker_rev": "ceeba0982d4ff40d32371c9d35f3d2dc1868de20",
   "benchmark_harness_rev": "c546dbd9f639f75cd2f75de8df2eb9f8ea15e8e7",
   "boolean_selector_rev": "437e7f06c7e416bed91e16ae1df453555897e945",
@@ -124,7 +124,7 @@
   "intl_tag": "9669926609e7efc17dfd74fbb44ec719a7e573cc", # 0.17.0-nullsafety
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_rev": "7e00f893440a72de0637970325e4ea44bd1e8c8e",
-  "linter_tag": "582986b8b029f6730a5591621ce05eab39e56f4c", # 1.21.2
+  "linter_tag": "14c916a16e78315e212cf79e7ccf4c19159a1bda", # 1.22.0
   "lints_tag": "8294e5648ab49474541527e2911e72e4c5aefe55", #2.0.0
   "logging_rev": "dfbe88b890c3b4f7bc06da5a7b3b43e9e263b688",
   "markupsafe_rev": "8f45f5cfa0009d2a70589bcda0349b8cb2b72783",
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index c1b807a..e65f669 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -2161,6 +2161,7 @@
   
   
   
+  
 <h3>Requests</h3><dl><dt class="request"><a name="request_edit.format">edit.format</a></dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "edit.format"
diff --git a/pkg/analysis_server/lib/protocol/protocol_constants.dart b/pkg/analysis_server/lib/protocol/protocol_constants.dart
index e8a4e7e..0a14c4f 100644
--- a/pkg/analysis_server/lib/protocol/protocol_constants.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_constants.dart
@@ -194,6 +194,8 @@
 const String EDIT_REQUEST_BULK_FIXES_IN_TEST_MODE = 'inTestMode';
 const String EDIT_REQUEST_FORMAT = 'edit.format';
 const String EDIT_REQUEST_FORMAT_FILE = 'file';
+const String EDIT_REQUEST_FORMAT_IF_ENABLED = 'edit.formatIfEnabled';
+const String EDIT_REQUEST_FORMAT_IF_ENABLED_DIRECTORIES = 'directories';
 const String EDIT_REQUEST_FORMAT_LINE_LENGTH = 'lineLength';
 const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH = 'selectionLength';
 const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET = 'selectionOffset';
@@ -242,6 +244,7 @@
 const String EDIT_RESPONSE_BULK_FIXES_DETAILS = 'details';
 const String EDIT_RESPONSE_BULK_FIXES_EDITS = 'edits';
 const String EDIT_RESPONSE_FORMAT_EDITS = 'edits';
+const String EDIT_RESPONSE_FORMAT_IF_ENABLED_EDITS = 'edits';
 const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH = 'selectionLength';
 const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET = 'selectionOffset';
 const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS = 'assists';
diff --git a/pkg/analysis_server/lib/protocol/protocol_generated.dart b/pkg/analysis_server/lib/protocol/protocol_generated.dart
index dc2c12a..37339ee 100644
--- a/pkg/analysis_server/lib/protocol/protocol_generated.dart
+++ b/pkg/analysis_server/lib/protocol/protocol_generated.dart
@@ -6258,6 +6258,140 @@
       );
 }
 
+/// edit.formatIfEnabled params
+///
+/// {
+///   "directories": List<FilePath>
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class EditFormatIfEnabledParams implements RequestParams {
+  /// The paths of the directories containing the code to be formatted.
+  List<String> directories;
+
+  EditFormatIfEnabledParams(this.directories);
+
+  factory EditFormatIfEnabledParams.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      List<String> directories;
+      if (json.containsKey('directories')) {
+        directories = jsonDecoder.decodeList(jsonPath + '.directories',
+            json['directories'], jsonDecoder.decodeString);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'directories');
+      }
+      return EditFormatIfEnabledParams(directories);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, 'edit.formatIfEnabled params', json);
+    }
+  }
+
+  factory EditFormatIfEnabledParams.fromRequest(Request request) {
+    return EditFormatIfEnabledParams.fromJson(
+        RequestDecoder(request), 'params', request.params);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['directories'] = directories;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return Request(id, 'edit.formatIfEnabled', toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is EditFormatIfEnabledParams) {
+      return listEqual(
+          directories, other.directories, (String a, String b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => directories.hashCode;
+}
+
+/// edit.formatIfEnabled result
+///
+/// {
+///   "edits": List<SourceFileEdit>
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class EditFormatIfEnabledResult implements ResponseResult {
+  /// The edit(s) to be applied in order to format the code. The list will be
+  /// empty if none of the files were formatted, whether because they were not
+  /// eligible to be formatted or because they were already formatted.
+  List<SourceFileEdit> edits;
+
+  EditFormatIfEnabledResult(this.edits);
+
+  factory EditFormatIfEnabledResult.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      List<SourceFileEdit> edits;
+      if (json.containsKey('edits')) {
+        edits = jsonDecoder.decodeList(
+            jsonPath + '.edits',
+            json['edits'],
+            (String jsonPath, Object? json) =>
+                SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'edits');
+      }
+      return EditFormatIfEnabledResult(edits);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, 'edit.formatIfEnabled result', json);
+    }
+  }
+
+  factory EditFormatIfEnabledResult.fromResponse(Response response) {
+    return EditFormatIfEnabledResult.fromJson(
+        ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        'result',
+        response.result);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['edits'] =
+        edits.map((SourceFileEdit value) => value.toJson()).toList();
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is EditFormatIfEnabledResult) {
+      return listEqual(
+          edits, other.edits, (SourceFileEdit a, SourceFileEdit b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => edits.hashCode;
+}
+
 /// edit.format params
 ///
 /// {
diff --git a/pkg/analysis_server/lib/src/cider/document_symbols.dart b/pkg/analysis_server/lib/src/cider/document_symbols.dart
index 48aec9f..f8c77758 100644
--- a/pkg/analysis_server/lib/src/cider/document_symbols.dart
+++ b/pkg/analysis_server/lib/src/cider/document_symbols.dart
@@ -15,10 +15,9 @@
 
   CiderDocumentSymbolsComputer(this._fileResolver);
 
-  @Deprecated('Use compute2() instead')
-  List<DocumentSymbol> compute(String filePath) {
+  Future<List<DocumentSymbol>> compute2(String filePath) async {
     var result = <DocumentSymbol>[];
-    var resolvedUnit = _fileResolver.resolve(path: filePath);
+    var resolvedUnit = await _fileResolver.resolve2(path: filePath);
 
     final computer = DartUnitOutlineComputer(resolvedUnit);
     final outline = computer.compute();
@@ -36,11 +35,6 @@
     return result;
   }
 
-  Future<List<DocumentSymbol>> compute2(String filePath) async {
-    // ignore: deprecated_member_use_from_same_package
-    return compute(filePath);
-  }
-
   DocumentSymbol _asDocumentSymbol(
     Set<SymbolKind> supportedKinds,
     LineInfo lineInfo,
diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index dd17833..34e97b2 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -81,8 +81,7 @@
 
   String get oldName => canRename.refactoringElement.element.displayName;
 
-  @Deprecated('Use computeRenameRanges2() instead')
-  RenameResponse? computeRenameRanges() {
+  Future<RenameResponse?> computeRenameRanges2() async {
     var elements = <Element>[];
     var element = canRename.refactoringElement.element;
     if (element is PropertyInducingElement && element.isSynthetic) {
@@ -94,23 +93,19 @@
     } else {
       elements.add(element);
     }
+    var fileResolver = canRename._fileResolver;
     var matches = <CiderSearchMatch>[];
     for (var element in elements) {
-      matches.addAll(canRename._fileResolver.findReferences(element));
+      matches.addAll(await fileResolver.findReferences2(element));
     }
     FlutterWidgetRename? flutterRename;
     if (canRename._flutterWidgetState != null) {
       var stateWidget = canRename._flutterWidgetState!;
-      var match = canRename._fileResolver.findReferences(stateWidget.state);
+      var match = await fileResolver.findReferences2(stateWidget.state);
       flutterRename = FlutterWidgetRename(stateWidget.newName, match);
     }
     return RenameResponse(matches, this, flutterWidgetRename: flutterRename);
   }
-
-  Future<RenameResponse?> computeRenameRanges2() async {
-    // ignore: deprecated_member_use_from_same_package
-    return computeRenameRanges();
-  }
 }
 
 class CiderRenameComputer {
@@ -120,9 +115,9 @@
 
   /// Check if the identifier at the [line], [column] for the file at the
   /// [filePath] can be renamed.
-  @Deprecated('Use canRename2() instead')
-  CanRenameResponse? canRename(String filePath, int line, int column) {
-    var resolvedUnit = _fileResolver.resolve(path: filePath);
+  Future<CanRenameResponse?> canRename2(
+      String filePath, int line, int column) async {
+    var resolvedUnit = await _fileResolver.resolve2(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(line) + column;
 
@@ -151,14 +146,6 @@
     return null;
   }
 
-  /// Check if the identifier at the [line], [column] for the file at the
-  /// [filePath] can be renamed.
-  Future<CanRenameResponse?> canRename2(
-      String filePath, int line, int column) async {
-    // ignore: deprecated_member_use_from_same_package
-    return canRename(filePath, line, column);
-  }
-
   bool _canRenameElement(Element element) {
     var enclosingElement = element.enclosingElement;
     if (element is ConstructorElement) {
diff --git a/pkg/analysis_server/lib/src/cider/signature_help.dart b/pkg/analysis_server/lib/src/cider/signature_help.dart
index 4bf5e60..107060e 100644
--- a/pkg/analysis_server/lib/src/cider/signature_help.dart
+++ b/pkg/analysis_server/lib/src/cider/signature_help.dart
@@ -15,9 +15,9 @@
 
   CiderSignatureHelpComputer(this._fileResolver);
 
-  @Deprecated('Use compute2() instead')
-  SignatureHelpResponse? compute(String filePath, int line, int column) {
-    var resolvedUnit = _fileResolver.resolve(path: filePath);
+  Future<SignatureHelpResponse?> compute2(
+      String filePath, int line, int column) async {
+    var resolvedUnit = await _fileResolver.resolve2(path: filePath);
     var lineInfo = resolvedUnit.lineInfo;
     var offset = lineInfo.getOffsetOfLine(line) + column;
     final formats = <MarkupKind>{MarkupKind.Markdown};
@@ -45,12 +45,6 @@
     }
     return null;
   }
-
-  Future<SignatureHelpResponse?> compute2(
-      String filePath, int line, int column) async {
-    // ignore: deprecated_member_use_from_same_package
-    return compute(filePath, line, column);
-  }
 }
 
 class SignatureHelpResponse {
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 303ffc6..299f79a 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -681,6 +681,7 @@
         node.externalKeyword, HighlightRegionType.BUILT_IN);
     computer._addRegion_token(
         node.factoryKeyword, HighlightRegionType.BUILT_IN);
+    computer._addRegion_token(node.constKeyword, HighlightRegionType.KEYWORD);
     super.visitConstructorDeclaration(node);
   }
 
diff --git a/pkg/analysis_server/lib/src/domain_analysis.dart b/pkg/analysis_server/lib/src/domain_analysis.dart
index 128de8d..6874ce4 100644
--- a/pkg/analysis_server/lib/src/domain_analysis.dart
+++ b/pkg/analysis_server/lib/src/domain_analysis.dart
@@ -12,8 +12,9 @@
 import 'package:analysis_server/src/handler/legacy/analysis_get_signature.dart';
 import 'package:analysis_server/src/handler/legacy/analysis_reanalyze.dart';
 import 'package:analysis_server/src/handler/legacy/analysis_set_analysis_roots.dart';
+import 'package:analysis_server/src/handler/legacy/analysis_set_subscriptions.dart';
+import 'package:analysis_server/src/handler/legacy/unsupported_request.dart';
 import 'package:analysis_server/src/plugin/request_converter.dart';
-import 'package:analysis_server/src/protocol/protocol_internal.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:analyzer/src/generated/engine.dart' as engine;
@@ -25,43 +26,6 @@
   /// [server].
   AnalysisDomainHandler(AnalysisServer server) : super(server);
 
-  /// Implement the `analysis.getLibraryDependencies` request.
-  Response getLibraryDependencies(Request request) {
-    return Response.unsupportedFeature(request.id,
-        'Please contact the Dart analyzer team if you need this request.');
-//    server.onAnalysisComplete.then((_) {
-//      LibraryDependencyCollector collector =
-//          new LibraryDependencyCollector(server.analysisContexts);
-//      Set<String> libraries = collector.collectLibraryDependencies();
-//      Map<String, Map<String, List<String>>> packageMap =
-//          collector.calculatePackageMap(server.folderMap);
-//      server.sendResponse(new AnalysisGetLibraryDependenciesResult(
-//              libraries.toList(growable: false), packageMap)
-//          .toResponse(request.id));
-//    }).catchError((error, st) {
-//      server.sendResponse(new Response.serverError(request, error, st));
-//    });
-//    // delay response
-//    return Response.DELAYED_RESPONSE;
-  }
-
-  /// Implement the `analysis.getReachableSources` request.
-  Response getReachableSources(Request request) {
-    return Response.unsupportedFeature(request.id,
-        'Please contact the Dart analyzer team if you need this request.');
-//    AnalysisGetReachableSourcesParams params =
-//        new AnalysisGetReachableSourcesParams.fromRequest(request);
-//    ContextSourcePair pair = server.getContextSourcePair(params.file);
-//    if (pair.context == null || pair.source == null) {
-//      return new Response.getReachableSourcesInvalidFile(request);
-//    }
-//    Map<String, List<String>> sources =
-//        new ReachableSourceCollector(pair.source, pair.context)
-//            .collectSources();
-//    return new AnalysisGetReachableSourcesResult(sources)
-//        .toResponse(request.id);
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
@@ -78,13 +42,15 @@
             .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_GET_LIBRARY_DEPENDENCIES) {
-        return getLibraryDependencies(request);
+        UnsupportedRequestHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_GET_NAVIGATION) {
         AnalysisGetNavigationHandler(server, request, cancellationToken)
             .handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_GET_REACHABLE_SOURCES) {
-        return getReachableSources(request);
+        UnsupportedRequestHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_GET_SIGNATURE) {
         AnalysisGetSignatureHandler(server, request, cancellationToken)
             .handle();
@@ -101,7 +67,9 @@
       } else if (requestName == ANALYSIS_REQUEST_SET_PRIORITY_FILES) {
         return setPriorityFiles(request);
       } else if (requestName == ANALYSIS_REQUEST_SET_SUBSCRIPTIONS) {
-        return setSubscriptions(request);
+        AnalysisSetSubscriptionsHandler(server, request, cancellationToken)
+            .handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == ANALYSIS_REQUEST_UPDATE_CONTENT) {
         return updateContent(request);
       } else if (requestName == ANALYSIS_REQUEST_UPDATE_OPTIONS) {
@@ -143,37 +111,6 @@
     return AnalysisSetPriorityFilesResult().toResponse(request.id);
   }
 
-  /// Implement the 'analysis.setSubscriptions' request.
-  Response setSubscriptions(Request request) {
-    var params = AnalysisSetSubscriptionsParams.fromRequest(request);
-
-    for (var fileList in params.subscriptions.values) {
-      for (var file in fileList) {
-        if (!server.isAbsoluteAndNormalized(file)) {
-          return Response.invalidFilePathFormat(request, file);
-        }
-      }
-    }
-
-    // parse subscriptions
-    var subMap =
-        mapMap<AnalysisService, List<String>, AnalysisService, Set<String>>(
-            params.subscriptions,
-            valueCallback: (List<String> subscriptions) =>
-                subscriptions.toSet());
-    server.setAnalysisSubscriptions(subMap);
-    //
-    // Forward the request to the plugins.
-    //
-    var converter = RequestConverter();
-    server.pluginManager.setAnalysisSetSubscriptionsParams(
-        converter.convertAnalysisSetSubscriptionsParams(params));
-    //
-    // Send the response.
-    //
-    return AnalysisSetSubscriptionsResult().toResponse(request.id);
-  }
-
   /// Implement the 'analysis.updateContent' request.
   Response updateContent(Request request) {
     var params = AnalysisUpdateContentParams.fromRequest(request);
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index 86bffa8..be22f29 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -9,6 +9,7 @@
 import 'package:analysis_server/src/collections.dart';
 import 'package:analysis_server/src/domain_abstract.dart';
 import 'package:analysis_server/src/handler/legacy/edit_bulk_fixes.dart';
+import 'package:analysis_server/src/handler/legacy/edit_format_if_enabled.dart';
 import 'package:analysis_server/src/handler/legacy/edit_get_assists.dart';
 import 'package:analysis_server/src/handler/legacy/edit_get_fixes.dart';
 import 'package:analysis_server/src/handler/legacy/edit_get_postfix_completion.dart';
@@ -119,6 +120,9 @@
       var requestName = request.method;
       if (requestName == EDIT_REQUEST_FORMAT) {
         return format(request);
+      } else if (requestName == EDIT_REQUEST_FORMAT_IF_ENABLED) {
+        EditFormatIfEnabledHandler(server, request, cancellationToken).handle();
+        return Response.DELAYED_RESPONSE;
       } else if (requestName == EDIT_REQUEST_GET_ASSISTS) {
         EditGetAssistsHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
diff --git a/pkg/analysis_server/lib/src/handler/legacy/analysis_set_subscriptions.dart b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_subscriptions.dart
new file mode 100644
index 0000000..bce48cf
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/analysis_set_subscriptions.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2022, 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.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/plugin/request_converter.dart';
+import 'package:analysis_server/src/protocol/protocol_internal.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `analysis.setSubscriptions` request.
+class AnalysisSetSubscriptionsHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  AnalysisSetSubscriptionsHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    var params = AnalysisSetSubscriptionsParams.fromRequest(request);
+
+    for (var fileList in params.subscriptions.values) {
+      for (var file in fileList) {
+        if (!server.isAbsoluteAndNormalized(file)) {
+          sendResponse(Response.invalidFilePathFormat(request, file));
+        }
+      }
+    }
+
+    // parse subscriptions
+    var subMap =
+        mapMap<AnalysisService, List<String>, AnalysisService, Set<String>>(
+            params.subscriptions,
+            valueCallback: (List<String> subscriptions) =>
+                subscriptions.toSet());
+    server.setAnalysisSubscriptions(subMap);
+    //
+    // Forward the request to the plugins.
+    //
+    var converter = RequestConverter();
+    server.pluginManager.setAnalysisSetSubscriptionsParams(
+        converter.convertAnalysisSetSubscriptionsParams(params));
+    //
+    // Send the response.
+    //
+    sendResult(AnalysisSetSubscriptionsResult());
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart
new file mode 100644
index 0000000..5e404d4
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/edit_format_if_enabled.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2022, 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.
+
+import 'dart:async';
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
+import 'package:dart_style/src/dart_formatter.dart';
+import 'package:dart_style/src/exceptions.dart';
+import 'package:dart_style/src/source_code.dart';
+
+/// The handler for the `edit.formatIfEnabled` request.
+class EditFormatIfEnabledHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  EditFormatIfEnabledHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  /// Format the file at the given [filePath].
+  ///
+  /// Throws a [FileSystemException] if the file doesn't exist or can't be read.
+  /// Throws a [FormatterException] if the code could not be formatted.
+  List<SourceEdit> formatFile(String filePath) {
+    // TODO(brianwilkerson) Move this to a superclass when `edit.format` is
+    //  implemented by a handler class so the code can be shared.
+    var resource = server.resourceProvider.getFile(filePath);
+    var originalContent = resource.readAsStringSync();
+    var code = SourceCode(originalContent, uri: null, isCompilationUnit: true);
+
+    var formatter = DartFormatter();
+    var formatResult = formatter.formatSource(code);
+    var formattedContent = formatResult.text;
+
+    var edits = <SourceEdit>[];
+    if (formattedContent != originalContent) {
+      // TODO(brianwilkerson) Replace full replacements with smaller, more
+      //  targeted edits.
+      var edit = SourceEdit(0, originalContent.length, formattedContent);
+      edits.add(edit);
+    }
+    return edits;
+  }
+
+  @override
+  Future<void> handle() async {
+    var params = EditFormatIfEnabledParams.fromRequest(request);
+    var collection = AnalysisContextCollectionImpl(
+      includedPaths: params.directories,
+      resourceProvider: server.resourceProvider,
+      sdkPath: server.sdkPath,
+    );
+    var sourceFileEdits = <SourceFileEdit>[];
+    for (var context in collection.contexts) {
+      if (context.analysisOptions.codeStyleOptions.useFormatter) {
+        _formatInContext(context, sourceFileEdits);
+      }
+    }
+    sendResult(EditFormatIfEnabledResult(sourceFileEdits));
+  }
+
+  /// Format all of the files in the given [context], adding the edits to the
+  /// list of [sourceFileEdits].
+  void _formatInContext(DriverBasedAnalysisContext context,
+      List<SourceFileEdit> sourceFileEdits) {
+    for (var filePath in context.contextRoot.analyzedFiles()) {
+      var pathContext = context.resourceProvider.pathContext;
+      if (file_paths.isDart(pathContext, filePath)) {
+        try {
+          var sourceEdits = formatFile(filePath);
+          if (sourceEdits.isNotEmpty) {
+            sourceFileEdits
+                .add(SourceFileEdit(filePath, 0, edits: sourceEdits));
+          }
+        } catch (exception) {
+          // Ignore files that can't be formatted.
+        }
+      }
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/unsupported_request.dart b/pkg/analysis_server/lib/src/handler/legacy/unsupported_request.dart
new file mode 100644
index 0000000..03dc5a5
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/unsupported_request.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2022, 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.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler used for the request that are no longer supported.
+class UnsupportedRequestHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  UnsupportedRequestHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    sendResponse(Response.unsupportedFeature(request.id,
+        'Please contact the Dart analyzer team if you need this request.'));
+  }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart
index 6d3c100..8d092f4 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_if_null.dart
@@ -5,6 +5,7 @@
 import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/precedence.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -39,11 +40,21 @@
         nullableExpression = node.thenExpression;
         defaultExpression = node.elseExpression;
       }
+
+      var parentheses = defaultExpression.precedence <
+          Precedence.forTokenType(TokenType.QUESTION_QUESTION);
+
       await builder.addDartFileEdit(file, (builder) {
         builder.addReplacement(range.node(node), (builder) {
           builder.write(utils.getNodeText(nullableExpression));
           builder.write(' ?? ');
+          if (parentheses) {
+            builder.write('(');
+          }
           builder.write(utils.getNodeText(defaultExpression));
+          if (parentheses) {
+            builder.write(')');
+          }
         });
       });
     }
diff --git a/pkg/analysis_server/test/analysis/get_errors_test.dart b/pkg/analysis_server/test/analysis/get_errors_test.dart
index 8310a89..db72005 100644
--- a/pkg/analysis_server/test/analysis/get_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/get_errors_test.dart
@@ -4,13 +4,11 @@
 
 import 'package:analysis_server/protocol/protocol.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -19,123 +17,117 @@
 }
 
 @reflectiveTest
-class GetErrorsTest extends AbstractAnalysisTest {
-  static const String requestId = 'test-getError';
+class GetErrorsTest extends PubPackageAnalysisServerTest {
+  static const String _requestId = 'test-getError';
 
   @override
   Future<void> setUp() async {
     super.setUp();
-    server.handlers = [
-      AnalysisDomainHandler(server),
-    ];
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_afterAnalysisComplete() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 main() {
   print(42)
 }
 ''');
-    await waitForTasksFinished();
-    var errors = await _getErrors(testFile);
+
+    await server.onAnalysisComplete;
+
+    var errors = await _getErrors(testFile.path);
     expect(errors, hasLength(1));
   }
 
   Future<void> test_errorInPart() async {
-    var libPath = join(testFolder, 'main.dart');
-    var partPath = join(testFolder, 'main_part.dart');
-    newFile2(libPath, r'''
-library main;
-part 'main_part.dart';
+    var libraryFile = newFile2('$testPackageLibPath/a.dart', r'''
+part 'b.dart';
 class A {}
 ''');
-    newFile2(partPath, r'''
-part of main;
+
+    var partFile = newFile2('$testPackageLibPath/b.dart', r'''
+part of 'a.dart';
 class A {}
 ''');
-    await waitForTasksFinished();
+
     {
-      var libErrors = await _getErrors(libPath);
+      var libErrors = await _getErrors(libraryFile.path);
       expect(libErrors, isEmpty);
     }
     {
-      var partErrors = await _getErrors(partPath);
+      var partErrors = await _getErrors(partFile.path);
       expect(partErrors, hasLength(1));
     }
   }
 
-  @failingTest
   Future<void> test_fileWithoutContext() async {
-    // Broken under the new driver.
-    var file = convertPath('/outside.dart');
-    newFile2(file, '''
-main() {
-  print(42);
-}
-''');
-    await _checkInvalid(file);
+    await setRoots(included: [], excluded: []);
+
+    var request = _createGetErrorsRequest(testFile.path);
+    var response = await serverChannel.sendRequest(request);
+    assertResponseFailure(
+      response,
+      requestId: _requestId,
+      errorCode: RequestErrorCode.GET_ERRORS_INVALID_FILE,
+    );
   }
 
   Future<void> test_hasErrors() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 main() {
   print(42)
 }
 ''');
-    var errors = await _getErrors(testFile);
+
+    var errors = await _getErrors(testFile.path);
     expect(errors, hasLength(1));
     {
       var error = errors[0];
       expect(error.severity, AnalysisErrorSeverity.ERROR);
       expect(error.type, AnalysisErrorType.SYNTACTIC_ERROR);
-      expect(error.location.file, testFile);
+      expect(error.location.file, testFilePathPlatform);
       expect(error.location.startLine, 2);
     }
   }
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = _createGetErrorsRequest('test.dart');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure(requestId, RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: _requestId,
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_invalidFilePathFormat_notNormalized() async {
     var request = _createGetErrorsRequest(convertPath('/foo/../bar/test.dart'));
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure(requestId, RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: _requestId,
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_noErrors() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 main() {
   print(42);
 }
 ''');
-    var errors = await _getErrors(testFile);
+
+    var errors = await _getErrors(testFile.path);
     expect(errors, isEmpty);
   }
 
-  Future<void> _checkInvalid(String file) async {
-    var request = _createGetErrorsRequest(file);
-    var response = await serverChannel.sendRequest(request);
-    expect(response.error, isNotNull);
-    expect(response.error!.code, RequestErrorCode.GET_ERRORS_INVALID_FILE);
+  Request _createGetErrorsRequest(String path) {
+    return AnalysisGetErrorsParams(path).toRequest(_requestId);
   }
 
-  Request _createGetErrorsRequest(String file) {
-    return AnalysisGetErrorsParams(file).toRequest(requestId);
-  }
-
-  Future<List<AnalysisError>> _getErrors(String file) async {
-    var request = _createGetErrorsRequest(file);
-    var response = await serverChannel.sendRequest(request);
+  Future<List<AnalysisError>> _getErrors(String path) async {
+    var request = _createGetErrorsRequest(path);
+    var response = await handleSuccessfulRequest(request);
     return AnalysisGetErrorsResult.fromResponse(response).errors;
   }
 }
diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart
index 96b7f7f..9120539 100644
--- a/pkg/analysis_server/test/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/analysis/get_hover_test.dart
@@ -8,7 +8,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -42,15 +42,15 @@
 }
 
 @reflectiveTest
-class AnalysisHoverTest extends AbstractAnalysisTest {
+class AnalysisHoverTest extends PubPackageAnalysisServerTest {
   Future<HoverInformation> prepareHover(String search) async {
     return (await prepareHoverOrNull(search))!;
   }
 
   Future<HoverInformation?> prepareHoverAt(int offset) async {
-    await waitForTasksFinished();
-    var request = AnalysisGetHoverParams(testFile, offset).toRequest('0');
-    var response = await waitResponse(request);
+    await server.onAnalysisComplete;
+    var request = AnalysisGetHoverParams(testFile.path, offset).toRequest('0');
+    var response = await handleSuccessfulRequest(request);
     var result = AnalysisGetHoverResult.fromResponse(response);
     var hovers = result.hovers;
     return hovers.isNotEmpty ? hovers.first : null;
@@ -64,11 +64,11 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_class_constructor_named() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   /// my doc
@@ -99,7 +99,7 @@
   }
 
   Future<void> test_class_constructor_noKeyword_const() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   const A(int i);
@@ -113,8 +113,8 @@
     expect(hover.offset, findOffset('A(0)'));
     expect(hover.length, 'A'.length);
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.dartdoc, isNull);
     expect(hover.elementDescription, '(const) A A(int i)');
     expect(hover.elementKind, 'constructor');
@@ -126,7 +126,7 @@
   }
 
   Future<void> test_class_constructor_noKeyword_new() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {}
 void f() {
@@ -138,8 +138,8 @@
     expect(hover.offset, findOffset('A()'));
     expect(hover.length, 'A'.length);
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.dartdoc, isNull);
     expect(hover.elementDescription, '(new) A A()');
     expect(hover.elementKind, 'constructor');
@@ -151,7 +151,7 @@
   }
 
   Future<void> test_class_constructor_synthetic() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
 }
@@ -164,8 +164,8 @@
     expect(hover.offset, findOffset('new A') + 'new '.length);
     expect(hover.length, 'A'.length);
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.dartdoc, isNull);
     expect(hover.elementDescription, 'A A()');
     expect(hover.elementKind, 'constructor');
@@ -177,7 +177,7 @@
   }
 
   Future<void> test_class_constructor_synthetic_withTypeArgument() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A<T> {}
 void f() {
@@ -189,8 +189,8 @@
       expect(hover.offset, findOffset('A<String>'));
       expect(hover.length, 'A<String>'.length);
       // element
-      expect(hover.containingLibraryName, 'bin/test.dart');
-      expect(hover.containingLibraryPath, testFile);
+      expect(hover.containingLibraryName, 'package:test/test.dart');
+      expect(hover.containingLibraryPath, testFile.path);
       expect(hover.dartdoc, isNull);
       expect(hover.elementDescription, 'A<String> A()');
       expect(hover.elementKind, 'constructor');
@@ -219,7 +219,7 @@
   }
 
   Future<void> test_class_constructorReference_named() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<T> {
   /// doc aaa
   /// doc bbb
@@ -232,8 +232,8 @@
 ''');
     var hover = await prepareHover('named;');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, 'doc aaa\ndoc bbb');
     expect(hover.elementDescription, 'A<double> A.named()');
@@ -246,7 +246,7 @@
   }
 
   Future<void> test_class_constructorReference_unnamed_declared() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<T> {
   /// doc aaa
   /// doc bbb
@@ -259,8 +259,8 @@
 ''');
     var hover = await prepareHover('new;');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, 'doc aaa\ndoc bbb');
     expect(hover.elementDescription, 'A<double> A()');
@@ -273,7 +273,7 @@
   }
 
   Future<void> test_class_constructorReference_unnamed_declared_new() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<T> {
   /// doc aaa
   /// doc bbb
@@ -286,8 +286,8 @@
 ''');
     var hover = await prepareHover('new;');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, 'doc aaa\ndoc bbb');
     expect(hover.elementDescription, 'A<double> A()');
@@ -300,7 +300,7 @@
   }
 
   Future<void> test_class_constructorReference_unnamed_synthetic() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<T> {}
 
 void f() {
@@ -309,8 +309,8 @@
 ''');
     var hover = await prepareHover('new;');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, isNull);
     expect(hover.elementDescription, 'A<double> A()');
@@ -323,7 +323,7 @@
   }
 
   Future<void> test_class_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<E> {}
 class I1<K, V> {}
 class I2<E> {}
@@ -342,7 +342,7 @@
   }
 
   Future<void> test_class_declaration_abstract() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {}
 abstract class B extends A {}
 ''');
@@ -354,7 +354,7 @@
   }
 
   Future<void> test_class_getter_synthetic() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   /// doc aaa
@@ -367,8 +367,8 @@
 ''');
     var hover = await prepareHover('fff);');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'String fff');
@@ -379,7 +379,7 @@
   }
 
   Future<void> test_class_method_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   /// doc aaa
@@ -390,8 +390,8 @@
 ''');
     var hover = await prepareHover('mmm(int a');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
@@ -404,7 +404,7 @@
   }
 
   Future<void> test_class_method_reference() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   List<String> mmm(int a, String b) {
@@ -419,8 +419,8 @@
     expect(hover.offset, findOffset('mmm(42, '));
     expect(hover.length, 'mmm'.length);
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
     expect(hover.elementKind, 'method');
     expect(hover.isDeprecated, isFalse);
@@ -432,7 +432,7 @@
   }
 
   Future<void> test_class_method_reference_deprecated() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   @deprecated
   static void test() {}
@@ -443,14 +443,14 @@
 ''');
     var hover = await prepareHover('test();');
     // element
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.elementDescription, 'void test()');
     expect(hover.elementKind, 'method');
     expect(hover.isDeprecated, isTrue);
   }
 
   Future<void> test_class_method_reference_genericMethod() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 
 abstract class Stream<T> {
@@ -467,8 +467,8 @@
     expect(hover.offset, findOffset('transform(n'));
     expect(hover.length, 'transform'.length);
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.elementDescription,
         'Stream<S> transform<S>(StreamTransformer<int, S> streamTransformer)');
     expect(hover.elementKind, 'method');
@@ -482,7 +482,7 @@
   }
 
   Future<void> test_class_setter_hasDocumentation() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// getting
   int get foo => 42;
@@ -501,7 +501,7 @@
   }
 
   Future<void> test_class_setter_noDocumentation() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// getting
   int get foo => 42;
@@ -519,7 +519,7 @@
   }
 
   Future<void> test_class_setter_super_hasDocumentation() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// pgetting
   int get foo => 42;
@@ -543,7 +543,7 @@
   }
 
   Future<void> test_class_setter_super_noDocumentation() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// pgetting
   int get foo => 42;
@@ -566,7 +566,7 @@
 
   @failingTest
   Future<void> test_class_setter_super_noSetter() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// pgetting
   int get foo => 42;
@@ -586,7 +586,7 @@
   }
 
   Future<void> test_dartdoc_block() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /**
  * doc aaa
  * doc bbb
@@ -599,7 +599,7 @@
   }
 
   Future<void> test_dartdoc_inherited_fromInterface() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// my doc
   m() {} // in A
@@ -614,7 +614,7 @@
   }
 
   Future<void> test_dartdoc_inherited_fromSuper_direct() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// my doc
   m() {} // in A
@@ -629,7 +629,7 @@
   }
 
   Future<void> test_dartdoc_inherited_fromSuper_indirect() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// my doc
   m() {}
@@ -645,7 +645,7 @@
   }
 
   Future<void> test_dartdoc_inherited_preferSuper() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// my doc
   m() {}
@@ -664,7 +664,7 @@
   }
 
   Future<void> test_dartdoc_line() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// doc aaa
 /// doc bbb
 void f() {
@@ -675,7 +675,7 @@
   }
 
   Future<void> test_enum_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 enum MyEnum {AAA, BBB, CCC}
 ''');
     var hover = await prepareHover('MyEnum');
@@ -686,7 +686,7 @@
   }
 
   Future<void> test_enum_getter() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 enum E {
   v;
@@ -700,8 +700,8 @@
 ''');
     var hover = await prepareHover('foo);');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'E');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'int get foo');
@@ -709,7 +709,7 @@
   }
 
   Future<void> test_enum_getter_synthetic() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 enum E {
   v;
@@ -723,8 +723,8 @@
 ''');
     var hover = await prepareHover('fff);');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'E');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'String fff');
@@ -735,7 +735,7 @@
   }
 
   Future<void> test_enum_method_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 enum E {
   v;
@@ -747,8 +747,8 @@
 ''');
     var hover = await prepareHover('mmm(int a');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'E');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
@@ -761,7 +761,7 @@
   }
 
   Future<void> test_enum_method_reference() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 enum E {
   v;
@@ -777,8 +777,8 @@
     expect(hover.offset, findOffset('mmm(42, '));
     expect(hover.length, 'mmm'.length);
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'E');
     expect(hover.elementDescription, 'List<String> mmm(int a, String b)');
     expect(hover.elementKind, 'method');
@@ -791,7 +791,7 @@
   }
 
   Future<void> test_enum_setter_hasDocumentation() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 enum E {
   v;
   /// getting
@@ -811,7 +811,7 @@
   }
 
   Future<void> test_extensionDeclaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {}
 /// Comment
 extension E on A {}
@@ -827,7 +827,7 @@
   Future<void> test_function_multilineElementDescription() async {
     // Functions with at least 3 params will have element descriptions formatted
     // across multiple lines.
-    addTestFile('''
+    newFile2(testFilePath, '''
 List<String> fff(int a, [String b = 'b', String c = 'c']) {
 }
 ''');
@@ -841,7 +841,7 @@
   }
 
   Future<void> test_function_topLevel_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 /// doc aaa
 /// doc bbb
@@ -850,8 +850,8 @@
 ''');
     var hover = await prepareHover('fff(int a');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, isNull);
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(
@@ -865,7 +865,7 @@
   }
 
   Future<void> test_functionReference_classMethod_instance() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<T> {
   /// doc aaa
   /// doc bbb
@@ -878,8 +878,8 @@
 ''');
     var hover = await prepareHover('foo<double>');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'int foo<U>(int t, U u)');
@@ -892,7 +892,7 @@
   }
 
   Future<void> test_functionReference_classMethod_static() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A<T> {
   /// doc aaa
   /// doc bbb
@@ -905,8 +905,8 @@
 ''');
     var hover = await prepareHover('foo<double>');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, 'A');
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'int foo<U>(U u)');
@@ -919,7 +919,7 @@
   }
 
   Future<void> test_functionReference_topLevelFunction() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// doc aaa
 /// doc bbb
 int foo<T>(T a) => 0;
@@ -930,8 +930,8 @@
 ''');
     var hover = await prepareHover('foo<double>');
     // element
-    expect(hover.containingLibraryName, 'bin/test.dart');
-    expect(hover.containingLibraryPath, testFile);
+    expect(hover.containingLibraryName, 'package:test/test.dart');
+    expect(hover.containingLibraryPath, testFile.path);
     expect(hover.containingClassDescription, isNull);
     expect(hover.dartdoc, '''doc aaa\ndoc bbb''');
     expect(hover.elementDescription, 'int foo<T>(T a)');
@@ -944,7 +944,7 @@
   }
 
   Future<void> test_integerLiteral() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 void f() {
   foo(123);
 }
@@ -969,7 +969,7 @@
   }
 
   Future<void> test_integerLiteral_promoted() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 void f() {
   foo(123);
 }
@@ -995,10 +995,11 @@
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = AnalysisGetHoverParams('test.dart', 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -1006,15 +1007,16 @@
     var request =
         AnalysisGetHoverParams(convertPath('/foo/../bar/test.dart'), 0)
             .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_localVariable_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   m() {
@@ -1038,7 +1040,7 @@
   }
 
   Future<void> test_localVariable_reference_withPropagatedType() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 void f() {
   var vvv = 123;
@@ -1059,7 +1061,7 @@
   }
 
   Future<void> test_mixin_declaration() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 mixin A on B, C implements D, E {}
 class B {}
 class C {}
@@ -1074,7 +1076,7 @@
 
   @failingTest
   Future<void> test_mixin_reference() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 mixin A {}
 abstract class B {}
 class C with A implements B {}
@@ -1086,7 +1088,7 @@
   }
 
   Future<void> test_noHoverInfo() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 void f() {
   // nothing
@@ -1097,7 +1099,7 @@
   }
 
   Future<void> test_nonNullable() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 int? f(double? a) => null;
 
 void f() {
@@ -1110,7 +1112,7 @@
   }
 
   Future<void> test_parameter_declaration_fieldFormal() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// The field documentation.
   final int fff;
@@ -1131,7 +1133,7 @@
   }
 
   Future<void> test_parameter_declaration_required() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 library my.library;
 class A {
   /// The method documentation.
@@ -1155,7 +1157,7 @@
   }
 
   Future<void> test_parameter_defaultValue() async {
-    addTestFile('void b([int a=123]) { }');
+    newFile2(testFilePath, 'void b([int a=123]) { }');
     var hover = await prepareHover('a=');
     // element
     expect(hover.elementDescription, '[int a = 123]');
@@ -1164,7 +1166,7 @@
 
   Future<void>
       test_parameter_ofConstructor_optionalPositional_super_defaultValue_explicit() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   A([int a = 1]);
 }
@@ -1180,7 +1182,7 @@
 
   Future<void>
       test_parameter_ofConstructor_optionalPositional_super_defaultValue_inherited() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   A([int a = 1]);
 }
@@ -1196,7 +1198,7 @@
 
   Future<void>
       test_parameter_ofConstructor_optionalPositional_super_defaultValue_inherited2() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   A([num a = 1.2]);
 }
@@ -1211,7 +1213,7 @@
   }
 
   Future<void> test_parameter_reference_fieldFormal() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 class A {
   /// The field documentation.
   final int fff;
@@ -1232,7 +1234,7 @@
   }
 
   Future<void> test_simpleIdentifier_typedef_functionType() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 typedef A = void Function(int);
 ''');
     var hover = await prepareHover('A');
@@ -1244,7 +1246,7 @@
   }
 
   Future<void> test_simpleIdentifier_typedef_interfaceType() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 typedef A = Map<int, String>;
 ''');
     var hover = await prepareHover('A');
@@ -1256,7 +1258,7 @@
   }
 
   Future<void> test_simpleIdentifier_typedef_legacy() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 typedef void A(int a);
 ''');
     var hover = await prepareHover('A');
@@ -1275,10 +1277,10 @@
     required String elementKind,
     bool isDeprecated = false,
   }) {
-    containingLibraryName ??= 'bin/test.dart';
+    containingLibraryName ??= 'package:test/test.dart';
     expect(hover.containingLibraryName, containingLibraryName);
 
-    containingLibraryPath ??= testFile;
+    containingLibraryPath ??= testFile.path;
     expect(hover.containingLibraryPath, containingLibraryPath);
 
     expect(hover.elementDescription, elementDescription);
diff --git a/pkg/analysis_server/test/analysis/get_navigation_test.dart b/pkg/analysis_server/test/analysis/get_navigation_test.dart
index 3450000..2a70304 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -89,32 +89,33 @@
 class Foo {
   // ...
   // ...
-  Foo() {
-    print('');
-  }
+  Foo() {}
+  Foo.named() {}
   // ...
 }
 
 final a = Foo();
-final b = new Foo();
+final b = new Foo.named();
 ''');
     await waitForTasksFinished();
 
-    // Without `new`
+    // Without `new` / unnamed
     await _getNavigation(testFile, testCode.indexOf('Foo();'), 0);
     expect(regions, hasLength(1));
     expect(regions.first.targets, hasLength(1));
     var target = targets[regions.first.targets.first];
     expect(target.kind, ElementKind.CONSTRUCTOR);
     expect(target.offset, testCode.indexOf('Foo() {'));
+    expect(target.length, 3);
 
-    // With `new`
-    await _getNavigation(testFile, testCode.indexOf('new Foo();') + 4, 0);
+    // With `new` / named
+    await _getNavigation(testFile, testCode.indexOf('new Foo.named();') + 8, 0);
     expect(regions, hasLength(1));
     expect(regions.first.targets, hasLength(1));
     target = targets[regions.first.targets.first];
     expect(target.kind, ElementKind.CONSTRUCTOR);
-    expect(target.offset, testCode.indexOf('Foo() {'));
+    expect(target.offset, testCode.indexOf('named() {'));
+    expect(target.length, 5);
   }
 
   Future<void> test_fieldType() async {
diff --git a/pkg/analysis_server/test/analysis/get_signature_test.dart b/pkg/analysis_server/test/analysis/get_signature_test.dart
index ba5a920..3d14e5d 100644
--- a/pkg/analysis_server/test/analysis/get_signature_test.dart
+++ b/pkg/analysis_server/test/analysis/get_signature_test.dart
@@ -6,8 +6,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../analysis_abstract.dart';
-import '../mocks.dart';
+import '../analysis_server_base.dart';
 
 void main() {
   defineReflectiveSuite(() {
@@ -16,17 +15,16 @@
 }
 
 @reflectiveTest
-class AnalysisSignatureTest extends AbstractAnalysisTest {
+class AnalysisSignatureTest extends PubPackageAnalysisServerTest {
   Future<Response> prepareRawSignature(String search) {
     var offset = findOffset(search);
     return prepareRawSignatureAt(offset);
   }
 
   Future<Response> prepareRawSignatureAt(int offset, {String? file}) async {
-    await waitForTasksFinished();
-    var request =
-        AnalysisGetSignatureParams(file ?? testFile, offset).toRequest('0');
-    return waitResponse(request);
+    var request = AnalysisGetSignatureParams(file ?? testFile.path, offset)
+        .toRequest('0');
+    return handleRequest(request);
   }
 
   Future<AnalysisGetSignatureResult> prepareSignature(String search) {
@@ -43,11 +41,11 @@
   @override
   Future<void> setUp() async {
     super.setUp();
-    await createProject();
+    await setRoots(included: [workspaceRootPath], excluded: []);
   }
 
   Future<void> test_constructor() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// MyClass doc
 class MyClass {
   /// MyClass constructor doc
@@ -70,7 +68,7 @@
   }
 
   Future<void> test_constructor_factory() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// MyClass doc
 class MyClass {
   /// MyClass private constructor doc
@@ -97,7 +95,7 @@
   }
 
   Future<void> test_constructor_named() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// MyClass doc
 class MyClass {
   /// MyClass.foo constructor doc
@@ -120,7 +118,7 @@
   }
 
   Future<void> test_does_not_walk_up_over_closure() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 one(String name, int length) {}
 main() {
   one("Danny", () {
@@ -128,38 +126,47 @@
   });
 }
 ''');
-    var result = await prepareRawSignature('/*^*/');
-    var error = result.error!;
-    expect(error.code, equals(RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION));
+    var response = await prepareRawSignature('/*^*/');
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION,
+    );
   }
 
   Future<void> test_error_file_not_analyzed() async {
-    var result = await prepareRawSignatureAt(0,
+    var response = await prepareRawSignatureAt(0,
         file: convertPath('/not/in/project.dart'));
-    var error = result.error!;
+    var error = response.error!;
     expect(error.code, equals(RequestErrorCode.GET_SIGNATURE_INVALID_FILE));
   }
 
   Future<void> test_error_function_unknown() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 someFunc(/*^*/);
 ''');
-    var result = await prepareRawSignature('/*^*/');
-    var error = result.error!;
-    expect(error.code, equals(RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION));
+    var response = await prepareRawSignature('/*^*/');
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.GET_SIGNATURE_UNKNOWN_FUNCTION,
+    );
   }
 
   Future<void> test_error_offset_invalid() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 a() {}
 ''');
-    var result = await prepareRawSignatureAt(1000);
-    var error = result.error!;
-    expect(error.code, equals(RequestErrorCode.GET_SIGNATURE_INVALID_OFFSET));
+    var response = await prepareRawSignatureAt(1000);
+    assertResponseFailure(
+      response,
+      requestId: '0',
+      errorCode: RequestErrorCode.GET_SIGNATURE_INVALID_OFFSET,
+    );
   }
 
   Future<void> test_function_expression() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// f doc
 int Function(String) f(String s) => (int i) => int.parse(s) + i;
 main() {
@@ -177,14 +184,14 @@
   }
 
   Future<void> test_function_from_other_file() async {
-    newFile2('/project/bin/other.dart', '''
+    newFile2('$testPackageLibPath/other.dart', '''
 /// one doc
 one(String name, int length) {}
 main() {
   one("Danny", /*^*/);
 }
 ''');
-    addTestFile('''
+    newFile2(testFilePath, '''
 import 'other.dart';
 main() {
   one("Danny", /*^*/);
@@ -205,7 +212,7 @@
   }
 
   Future<void> test_function_irrelevant_parens() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, int length) {}
 main() {
@@ -227,7 +234,7 @@
   }
 
   Future<void> test_function_named() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, {int length}) {}
 main() {
@@ -247,7 +254,7 @@
   }
 
   Future<void> test_function_named_with_default_int() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, {int length = 1}) {}
 main() {
@@ -269,7 +276,7 @@
   }
 
   Future<void> test_function_named_with_default_string() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, {String email = "a@b.c"}) {}
 main() {
@@ -292,7 +299,7 @@
 
   Future<void> test_function_nested_call_inner() async {
     // eg. foo(bar(1, 2));
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String one) {}
 /// two doc
@@ -313,7 +320,7 @@
 
   Future<void> test_function_nested_call_outer() async {
     // eg. foo(bar(1, 2));
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String one) {}
 /// two doc
@@ -333,7 +340,7 @@
   }
 
   Future<void> test_function_no_dart_doc() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 one(String name, int length) {}
 main() {
   one("Danny", /*^*/);
@@ -354,7 +361,7 @@
   }
 
   Future<void> test_function_optional() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, [int length]) {}
 main() {
@@ -376,7 +383,7 @@
   }
 
   Future<void> test_function_optional_with_default() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, [int length = 11]) {}
 main() {
@@ -398,7 +405,7 @@
   }
 
   Future<void> test_function_required() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one(String name, int length) {}
 main() {
@@ -420,7 +427,7 @@
   }
 
   Future<void> test_function_zero_arguments() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// one doc
 one() {}
 main() {
@@ -435,10 +442,11 @@
 
   Future<void> test_invalidFilePathFormat_notAbsolute() async {
     var request = AnalysisGetSignatureParams('test.dart', 0).toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
@@ -446,15 +454,16 @@
     var request =
         AnalysisGetSignatureParams(convertPath('/foo/../bar/test.dart'), 0)
             .toRequest('0');
-    var response = await waitResponse(request);
-    expect(
+    var response = await handleRequest(request);
+    assertResponseFailure(
       response,
-      isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
+      requestId: '0',
+      errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
     );
   }
 
   Future<void> test_method_instance() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// MyClass doc
 class MyClass {
   /// MyClass constructor doc
@@ -480,7 +489,7 @@
   }
 
   Future<void> test_method_static() async {
-    addTestFile('''
+    newFile2(testFilePath, '''
 /// MyClass doc
 class MyClass {
   /// MyClass constructor doc
diff --git a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
index b61849e..42537b1 100644
--- a/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_closing_labels_test.dart
@@ -60,8 +60,8 @@
     await createProject();
   }
 
-  void subscribeForLabels() {
-    addAnalysisSubscription(AnalysisService.CLOSING_LABELS, testFile);
+  Future<void> subscribeForLabels() async {
+    await addAnalysisSubscription(AnalysisService.CLOSING_LABELS, testFile);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -69,7 +69,7 @@
     await waitForTasksFinished();
     expect(lastLabels, isNull);
 
-    await waitForLabels(() => subscribeForLabels());
+    await waitForLabels(() async => await subscribeForLabels());
 
     expect(lastLabels, expectedResults);
   }
@@ -84,18 +84,18 @@
     expect(lastLabels, isNull);
 
     // With no content, there should be zero labels.
-    await waitForLabels(() => subscribeForLabels());
+    await waitForLabels(() async => await subscribeForLabels());
     expect(lastLabels, hasLength(0));
 
     // With sample code there will be labels.
-    await waitForLabels(() => modifyTestFile(sampleCode));
+    await waitForLabels(() async => modifyTestFile(sampleCode));
 
     expect(lastLabels, expectedResults);
   }
 
-  Future waitForLabels(void Function() action) {
+  Future<void> waitForLabels(Future<void> Function() action) async {
     _labelsReceived = Completer();
-    action();
+    await action();
     return _labelsReceived.future;
   }
 }
diff --git a/pkg/analysis_server/test/analysis/notification_folding_test.dart b/pkg/analysis_server/test/analysis/notification_folding_test.dart
index bc1ed96..add62cf 100644
--- a/pkg/analysis_server/test/analysis/notification_folding_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_folding_test.dart
@@ -56,8 +56,8 @@
     await createProject();
   }
 
-  void subscribeForFolding() {
-    addAnalysisSubscription(AnalysisService.FOLDING, testFile);
+  Future<void> subscribeForFolding() async {
+    await addAnalysisSubscription(AnalysisService.FOLDING, testFile);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -65,7 +65,7 @@
     await waitForTasksFinished();
     expect(lastRegions, isNull);
 
-    await waitForFolding(() => subscribeForFolding());
+    await waitForFolding(() async => await subscribeForFolding());
 
     expect(lastRegions, expectedResults);
   }
@@ -80,18 +80,18 @@
     expect(lastRegions, isNull);
 
     // With no content, there should be zero regions.
-    await waitForFolding(() => subscribeForFolding());
+    await waitForFolding(() async => await subscribeForFolding());
     expect(lastRegions, hasLength(0));
 
     // With sample code there will be folding regions.
-    await waitForFolding(() => modifyTestFile(sampleCode));
+    await waitForFolding(() async => modifyTestFile(sampleCode));
 
     expect(lastRegions, expectedResults);
   }
 
-  Future waitForFolding(void Function() action) {
+  Future<void> waitForFolding(Future<void> Function() action) async {
     _regionsReceived = Completer();
-    action();
+    await action();
     return _regionsReceived.future;
   }
 }
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index f74517f..6b6ebd6 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -1041,6 +1041,19 @@
     assertHasRegion(HighlightRegionType.KEYWORD, 'with A;');
   }
 
+  Future<void> test_KEYWORD_const_constructor() async {
+    addTestFile('''
+class A {
+  const A(); // 1
+}
+const a = const A(); // 2
+''');
+    await prepareHighlights();
+    assertHasRegion(HighlightRegionType.KEYWORD, 'const A(); // 1');
+    assertHasRegion(HighlightRegionType.KEYWORD, 'const a =');
+    assertHasRegion(HighlightRegionType.KEYWORD, 'const A(); // 2');
+  }
+
   Future<void> test_KEYWORD_const_list() async {
     addTestFile('''
 var v = const [];
@@ -1649,8 +1662,8 @@
     return length;
   }
 
-  Future prepareHighlights() {
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+  Future<void> prepareHighlights() async {
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
     return _resultsAvailable.future;
   }
 
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
index c7e6989..0544f28 100644
--- a/pkg/analysis_server/test/analysis/notification_implemented_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -85,8 +85,8 @@
   }
 
   /// Subscribe for `IMPLEMENTED` and wait for the notification.
-  Future prepareImplementedElements() {
-    subscribeForImplemented();
+  Future<void> prepareImplementedElements() async {
+    await subscribeForImplemented();
     return waitForImplementedElements();
   }
 
@@ -107,9 +107,9 @@
     await createProject();
   }
 
-  void subscribeForImplemented() {
+  Future<void> subscribeForImplemented() async {
     setPriorityFiles([testFile]);
-    addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
+    await addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
   }
 
   Future<void> test_afterAnalysis() async {
@@ -123,7 +123,7 @@
   }
 
   Future<void> test_afterIncrementalResolution() async {
-    subscribeForImplemented();
+    await subscribeForImplemented();
     addTestFile('''
 class A {}
 class B extends A {}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index fc40e2d..71a606a 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -178,8 +178,8 @@
 class AnalysisNotificationNavigationTest extends AbstractNavigationTest {
   final Completer<void> _resultsAvailable = Completer();
 
-  Future prepareNavigation() async {
-    addAnalysisSubscription(AnalysisService.NAVIGATION, testFile);
+  Future<void> prepareNavigation() async {
+    await addAnalysisSubscription(AnalysisService.NAVIGATION, testFile);
     await _resultsAvailable.future;
     assertRegionsSorted();
   }
@@ -257,7 +257,7 @@
 ''');
     await prepareNavigation();
     assertHasRegionString('A<int>(0)', 'A'.length);
-    assertHasTarget('A(_);', 0);
+    assertHasTarget('A(_);');
   }
 
   Future<void> test_annotationConstructor_implicit() async {
@@ -333,7 +333,7 @@
 ''');
     await prepareNavigation();
     assertHasRegionString('A()', 'A'.length);
-    assertHasTarget('A();', 0);
+    assertHasTarget('A();');
   }
 
   Future<void> test_annotationField() async {
@@ -391,7 +391,7 @@
     await prepareNavigation();
     // has region for complete "A.named"
     assertHasRegion('A(BBB');
-    assertHasTarget('A(BBB', 0);
+    assertHasTarget('A(BBB');
     // validate that we don't forget to resolve parameters
     assertHasRegionTarget('BBB p', 'BBB {}');
   }
@@ -422,8 +422,8 @@
 }
 ''');
     await prepareNavigation();
-    assertHasRegionTarget('A.new;', 'A();', targetLength: 0);
-    assertHasRegionTarget('new;', 'A();', targetLength: 0);
+    assertHasRegionTarget('A.new;', 'A();');
+    assertHasRegionTarget('new;', 'A();');
   }
 
   Future<void> test_class_constructorReference_unnamed_declared_new() async {
@@ -542,7 +542,7 @@
 ''');
     await prepareNavigation();
     assertHasRegion('B;');
-    assertHasTarget('B() {}', 0);
+    assertHasTarget('B() {}');
   }
 
   Future<void>
@@ -559,7 +559,7 @@
     await prepareNavigation();
     {
       assertHasRegion('C<A>');
-      assertHasTarget('C() {}', 0);
+      assertHasTarget('C() {}');
     }
     {
       assertHasRegion('A>;');
@@ -652,10 +652,10 @@
 ''');
     await prepareNavigation();
 
-    assertHasRegionTarget('v1', 'E();', targetLength: 0);
-    assertHasRegionTarget('v2()', 'E();', targetLength: 0);
-    assertHasRegionTarget('v3', 'E();', targetLength: 0);
-    assertHasRegionTarget('new()', 'E();', targetLength: 0);
+    assertHasRegionTarget('v1', 'E();');
+    assertHasRegionTarget('v2()', 'E();');
+    assertHasRegionTarget('v3', 'E();');
+    assertHasRegionTarget('new()', 'E();');
   }
 
   Future<void> test_enum_field() async {
@@ -1020,7 +1020,7 @@
 ''');
     await prepareNavigation();
     assertHasRegionString('A();', 'A'.length);
-    assertHasTarget('A() {}', 0);
+    assertHasTarget('A() {}');
   }
 
   Future<void> test_instanceCreation_unnamed_withTypeArgument() async {
@@ -1036,7 +1036,7 @@
     await prepareNavigation();
     {
       assertHasRegionString('B<A>();', 'B'.length);
-      assertHasTarget('B() {}', 0);
+      assertHasTarget('B() {}');
     }
     {
       assertHasRegion('A>();');
@@ -1208,7 +1208,7 @@
     await prepareNavigation();
     {
       assertHasRegion('this();');
-      assertHasTarget('A() {}', 0);
+      assertHasTarget('A() {}');
     }
     {
       assertHasRegion('this.foo');
@@ -1308,7 +1308,7 @@
     await prepareNavigation();
     {
       assertHasRegionString('super');
-      assertHasTarget('A() {}', 0);
+      assertHasTarget('A() {}');
     }
     {
       assertHasRegion('super.named');
diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
index 5bf1c3b..ca7d1e2 100644
--- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart
@@ -71,8 +71,8 @@
     }
   }
 
-  Future prepareOccurrences() {
-    addAnalysisSubscription(AnalysisService.OCCURRENCES, testFile);
+  Future<void> prepareOccurrences() async {
+    await addAnalysisSubscription(AnalysisService.OCCURRENCES, testFile);
     return _resultsAvailable.future;
   }
 
diff --git a/pkg/analysis_server/test/analysis/notification_outline_test.dart b/pkg/analysis_server/test/analysis/notification_outline_test.dart
index 8db0451..14dc697 100644
--- a/pkg/analysis_server/test/analysis/notification_outline_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_outline_test.dart
@@ -28,8 +28,8 @@
   final Completer<void> _outlineReceived = Completer();
   Completer? _highlightsReceived = Completer();
 
-  Future prepareOutline() {
-    addAnalysisSubscription(AnalysisService.OUTLINE, testFile);
+  Future<void> prepareOutline() async {
+    await addAnalysisSubscription(AnalysisService.OUTLINE, testFile);
     return _outlineReceived.future;
   }
 
@@ -125,7 +125,7 @@
     // Make the file a priority one and subscribe for other notification.
     // This will pre-cache the analysis result for the file.
     setPriorityFiles([testFile]);
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
     await _highlightsReceived!.future;
 
     // Now subscribe for outline notification, we must get it even though
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index 2e10b24..77b9230 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -104,8 +104,8 @@
     }
   }
 
-  Future prepareOverrides() {
-    addAnalysisSubscription(AnalysisService.OVERRIDES, testFile);
+  Future<void> prepareOverrides() async {
+    await addAnalysisSubscription(AnalysisService.OVERRIDES, testFile);
     return _resultsAvailable.future;
   }
 
diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart
index b6014a5..1bf61f7 100644
--- a/pkg/analysis_server/test/analysis_abstract.dart
+++ b/pkg/analysis_server/test/analysis_abstract.dart
@@ -63,7 +63,8 @@
 
   AnalysisDriver get testDiver => server.getAnalysisDriver(testFile)!;
 
-  void addAnalysisSubscription(AnalysisService service, String file) {
+  Future<void> addAnalysisSubscription(
+      AnalysisService service, String file) async {
     // add file to subscription
     var files = analysisSubscriptions[service];
     if (files == null) {
@@ -74,7 +75,7 @@
     // set subscriptions
     var request =
         AnalysisSetSubscriptionsParams(analysisSubscriptions).toRequest('0');
-    handleSuccessfulRequest(request);
+    await waitResponse(request);
   }
 
   void addGeneralAnalysisSubscription(GeneralAnalysisService service) {
@@ -211,7 +212,7 @@
   }
 
   /// Returns a [Future] that completes when the server's analysis is complete.
-  Future waitForTasksFinished() {
+  Future<void> waitForTasksFinished() {
     return server.onAnalysisComplete;
   }
 
diff --git a/pkg/analysis_server/test/analysis_server_base.dart b/pkg/analysis_server/test/analysis_server_base.dart
new file mode 100644
index 0000000..6d6a1bf
--- /dev/null
+++ b/pkg/analysis_server/test/analysis_server_base.dart
@@ -0,0 +1,236 @@
+// Copyright (c) 2022, 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.
+
+import 'dart:async';
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/domain_analysis.dart';
+import 'package:analysis_server/src/domain_completion.dart';
+import 'package:analysis_server/src/protocol_server.dart';
+import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
+import 'package:analysis_server/src/utilities/mocks.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/instrumentation/service.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/generated/sdk.dart';
+import 'package:analyzer/src/test_utilities/mock_sdk.dart';
+import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
+import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:meta/meta.dart';
+import 'package:test/test.dart';
+
+import 'mocks.dart';
+
+/// TODO(scheglov) this is duplicate
+class AnalysisOptionsFileConfig {
+  final List<String> experiments;
+  final bool implicitCasts;
+  final bool implicitDynamic;
+  final List<String> lints;
+  final bool strictCasts;
+  final bool strictInference;
+  final bool strictRawTypes;
+
+  AnalysisOptionsFileConfig({
+    this.experiments = const [],
+    this.implicitCasts = true,
+    this.implicitDynamic = true,
+    this.lints = const [],
+    this.strictCasts = false,
+    this.strictInference = false,
+    this.strictRawTypes = false,
+  });
+
+  String toContent() {
+    var buffer = StringBuffer();
+
+    buffer.writeln('analyzer:');
+    buffer.writeln('  enable-experiment:');
+    for (var experiment in experiments) {
+      buffer.writeln('    - $experiment');
+    }
+    buffer.writeln('  language:');
+    buffer.writeln('    strict-casts: $strictCasts');
+    buffer.writeln('    strict-inference: $strictInference');
+    buffer.writeln('    strict-raw-types: $strictRawTypes');
+    buffer.writeln('  strong-mode:');
+    buffer.writeln('    implicit-casts: $implicitCasts');
+    buffer.writeln('    implicit-dynamic: $implicitDynamic');
+
+    buffer.writeln('linter:');
+    buffer.writeln('  rules:');
+    for (var lint in lints) {
+      buffer.writeln('    - $lint');
+    }
+
+    return buffer.toString();
+  }
+}
+
+class PubPackageAnalysisServerTest with ResourceProviderMixin {
+  late final MockServerChannel serverChannel;
+  late final AnalysisServer server;
+
+  AnalysisDomainHandler get analysisDomain {
+    return server.handlers.whereType<AnalysisDomainHandler>().single;
+  }
+
+  CompletionDomainHandler get completionDomain {
+    return server.handlers.whereType<CompletionDomainHandler>().single;
+  }
+
+  List<String> get experiments => [
+        EnableString.enhanced_enums,
+        EnableString.named_arguments_anywhere,
+        EnableString.super_parameters,
+      ];
+
+  File get testFile => getFile(testFilePath);
+
+  String get testFileContent => testFile.readAsStringSync();
+
+  String get testFilePath => '$testPackageLibPath/test.dart';
+
+  String get testFilePathPlatform => convertPath(testFilePath);
+
+  String get testPackageLibPath => '$testPackageRootPath/lib';
+
+  Folder get testPackageRoot => getFolder(testPackageRootPath);
+
+  String get testPackageRootPath => '$workspaceRootPath/test';
+
+  String get testPackageTestPath => '$testPackageRootPath/test';
+
+  String get workspaceRootPath => '/home';
+
+  void assertResponseFailure(
+    Response response, {
+    required String requestId,
+    required RequestErrorCode errorCode,
+  }) {
+    expect(
+      response,
+      isResponseFailure(requestId, errorCode),
+    );
+  }
+
+  void deleteTestPackageAnalysisOptionsFile() {
+    deleteAnalysisOptionsYamlFile(testPackageRootPath);
+  }
+
+  void deleteTestPackageConfigJsonFile() {
+    deletePackageConfigJsonFile(testPackageRootPath);
+  }
+
+  /// Returns the offset of [search] in [testFileContent].
+  /// Fails if not found.
+  /// TODO(scheglov) Rename it.
+  int findOffset(String search) {
+    var offset = testFileContent.indexOf(search);
+    expect(offset, isNot(-1));
+    return offset;
+  }
+
+  Future<Response> handleRequest(Request request) async {
+    return await serverChannel.sendRequest(request);
+  }
+
+  /// Validates that the given [request] is handled successfully.
+  Future<Response> handleSuccessfulRequest(Request request) async {
+    var response = await handleRequest(request);
+    expect(response, isResponseSuccess(request.id));
+    return response;
+  }
+
+  void processNotification(Notification notification) {}
+
+  Future<void> setRoots({
+    required List<String> included,
+    required List<String> excluded,
+  }) async {
+    var includedConverted = included.map(convertPath).toList();
+    var excludedConverted = excluded.map(convertPath).toList();
+    await handleSuccessfulRequest(
+      AnalysisSetAnalysisRootsParams(
+        includedConverted,
+        excludedConverted,
+        packageRoots: {},
+      ).toRequest('0'),
+    );
+  }
+
+  @mustCallSuper
+  void setUp() {
+    serverChannel = MockServerChannel();
+
+    var sdkRoot = newFolder('/sdk');
+    createMockSdk(
+      resourceProvider: resourceProvider,
+      root: sdkRoot,
+    );
+
+    writeTestPackageConfig();
+
+    writeTestPackageAnalysisOptionsFile(
+      AnalysisOptionsFileConfig(
+        experiments: experiments,
+      ),
+    );
+
+    serverChannel.notifications.listen(processNotification);
+
+    server = AnalysisServer(
+      serverChannel,
+      resourceProvider,
+      AnalysisServerOptions(),
+      DartSdkManager(sdkRoot.path),
+      CrashReportingAttachmentsBuilder.empty,
+      InstrumentationService.NULL_SERVICE,
+    );
+
+    server.pendingFilesRemoveOverlayDelay = const Duration(milliseconds: 10);
+    completionDomain.budgetDuration = const Duration(seconds: 30);
+  }
+
+  Future<void> tearDown() async {
+    await server.dispose();
+  }
+
+  void writePackageConfig(Folder root, PackageConfigFileBuilder config) {
+    newPackageConfigJsonFile(
+      root.path,
+      config.toContent(toUriStr: toUriStr),
+    );
+  }
+
+  void writeTestPackageAnalysisOptionsFile(AnalysisOptionsFileConfig config) {
+    newAnalysisOptionsYamlFile2(
+      testPackageRootPath,
+      config.toContent(),
+    );
+  }
+
+  void writeTestPackageConfig({
+    PackageConfigFileBuilder? config,
+    String? languageVersion,
+  }) {
+    if (config == null) {
+      config = PackageConfigFileBuilder();
+    } else {
+      config = config.copy();
+    }
+
+    config.add(
+      name: 'test',
+      rootPath: testPackageRootPath,
+      languageVersion: languageVersion,
+    );
+
+    writePackageConfig(testPackageRoot, config);
+  }
+
+  void writeTestPackagePubspecYamlFile(String content) {
+    newPubspecYamlFile(testPackageRootPath, content);
+  }
+}
diff --git a/pkg/analysis_server/test/client/completion_driver_test.dart b/pkg/analysis_server/test/client/completion_driver_test.dart
index 9cb255d..7090fc1 100644
--- a/pkg/analysis_server/test/client/completion_driver_test.dart
+++ b/pkg/analysis_server/test/client/completion_driver_test.dart
@@ -8,7 +8,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../domain_completion_test.dart';
+import '../analysis_server_base.dart';
 import '../services/completion/dart/completion_check.dart';
 import '../services/completion/dart/completion_contributor_util.dart';
 import 'impl/completion_driver.dart';
diff --git a/pkg/analysis_server/test/client/impl/completion_driver.dart b/pkg/analysis_server/test/client/impl/completion_driver.dart
index 3383e6c..df8faf3 100644
--- a/pkg/analysis_server/test/client/impl/completion_driver.dart
+++ b/pkg/analysis_server/test/client/impl/completion_driver.dart
@@ -13,8 +13,8 @@
 import 'package:matcher/matcher.dart';
 import 'package:meta/meta.dart';
 
+import '../../analysis_server_base.dart';
 import '../../constants.dart';
-import '../../domain_completion_test.dart';
 import 'expect_mixin.dart';
 
 CompletionSuggestion _createCompletionSuggestionFromAvailableSuggestion(
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 5c2c45e..8fce9e5 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -14,7 +14,7 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'analysis_abstract.dart';
-import 'domain_completion_test.dart';
+import 'analysis_server_base.dart';
 import 'mocks.dart';
 
 void main() {
@@ -1433,7 +1433,7 @@
     await waitForTasksFinished();
     expect(filesHighlights[testFile], isNull);
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
     await _resultsAvailable.future;
     // there are results
     expect(filesHighlights[testFile], isNotEmpty);
@@ -1447,7 +1447,7 @@
     await waitForTasksFinished();
     expect(filesHighlights[testFile], isNull);
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, file);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, file);
     await _resultsAvailable.future;
     // there are results
     expect(filesHighlights[file], isEmpty);
@@ -1476,7 +1476,7 @@
     await waitForTasksFinished();
     expect(filesHighlights[pkgFile], isNull);
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, pkgFile);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, pkgFile);
     await _resultsAvailable.future;
     // there are results
     expect(filesHighlights[pkgFile], isNotEmpty);
@@ -1502,7 +1502,7 @@
     await waitForTasksFinished();
     expect(filesHighlights[pkgFileA], isNull);
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, pkgFileA);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, pkgFileA);
     await _resultsAvailable.future;
     // there are results
     expect(filesHighlights[pkgFileA], isNotEmpty);
@@ -1528,7 +1528,7 @@
     // make it a priority file, so make analyzable
     server.setPriorityFiles('0', [pkgFile]);
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, pkgFile);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, pkgFile);
     await _resultsAvailable.future;
     // there are results
     expect(filesHighlights[pkgFile], isNotEmpty);
@@ -1542,7 +1542,7 @@
     await waitForTasksFinished();
     expect(filesHighlights[file], isNull);
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, file);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, file);
     await _resultsAvailable.future;
     // there are results
     expect(filesHighlights[file], isNotEmpty);
@@ -1552,7 +1552,7 @@
     addTestFile('int V = 42;');
     await createProject();
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
     // wait for analysis
     await waitForTasksFinished();
     expect(filesHighlights[testFile], isNotEmpty);
@@ -1562,7 +1562,7 @@
     addTestFile('int V = 42;');
     await createProject();
     // subscribe
-    addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
+    await addAnalysisSubscription(AnalysisService.HIGHLIGHTS, testFile);
     // wait for analysis
     await waitForTasksFinished();
     var params = pluginManager.analysisSetSubscriptionsParams!;
diff --git a/pkg/analysis_server/test/domain_completion_test.dart b/pkg/analysis_server/test/domain_completion_test.dart
index 816c714..ab580d0 100644
--- a/pkg/analysis_server/test/domain_completion_test.dart
+++ b/pkg/analysis_server/test/domain_completion_test.dart
@@ -4,21 +4,11 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/src/analysis_server.dart';
-import 'package:analysis_server/src/domain_analysis.dart';
-import 'package:analysis_server/src/domain_completion.dart';
 import 'package:analysis_server/src/plugin/plugin_manager.dart';
 import 'package:analysis_server/src/protocol_server.dart';
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/server/crash_reporting_attachments.dart';
-import 'package:analysis_server/src/utilities/mocks.dart';
-import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/service.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
-import 'package:analyzer/src/generated/sdk.dart';
-import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
-import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
 import 'package:analyzer_plugin/protocol/protocol.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
 import 'package:analyzer_utilities/check/check.dart';
@@ -26,6 +16,7 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import 'analysis_server_base.dart';
 import 'domain_completion_util.dart';
 import 'mocks.dart';
 import 'services/completion/dart/completion_check.dart';
@@ -40,52 +31,6 @@
   });
 }
 
-/// TODO(scheglov) this is duplicate
-class AnalysisOptionsFileConfig {
-  final List<String> experiments;
-  final bool implicitCasts;
-  final bool implicitDynamic;
-  final List<String> lints;
-  final bool strictCasts;
-  final bool strictInference;
-  final bool strictRawTypes;
-
-  AnalysisOptionsFileConfig({
-    this.experiments = const [],
-    this.implicitCasts = true,
-    this.implicitDynamic = true,
-    this.lints = const [],
-    this.strictCasts = false,
-    this.strictInference = false,
-    this.strictRawTypes = false,
-  });
-
-  String toContent() {
-    var buffer = StringBuffer();
-
-    buffer.writeln('analyzer:');
-    buffer.writeln('  enable-experiment:');
-    for (var experiment in experiments) {
-      buffer.writeln('    - $experiment');
-    }
-    buffer.writeln('  language:');
-    buffer.writeln('    strict-casts: $strictCasts');
-    buffer.writeln('    strict-inference: $strictInference');
-    buffer.writeln('    strict-raw-types: $strictRawTypes');
-    buffer.writeln('  strong-mode:');
-    buffer.writeln('    implicit-casts: $implicitCasts');
-    buffer.writeln('    implicit-dynamic: $implicitDynamic');
-
-    buffer.writeln('linter:');
-    buffer.writeln('  rules:');
-    for (var lint in lints) {
-      buffer.writeln('    - $lint');
-    }
-
-    return buffer.toString();
-  }
-}
-
 @reflectiveTest
 class CompletionDomainHandlerGetSuggestionDetails2Test
     extends PubPackageAnalysisServerTest {
@@ -212,6 +157,11 @@
     expect(response.error?.code, RequestErrorCode.INVALID_FILE_PATH_FORMAT);
   }
 
+  Future<void> _configureWithWorkspaceRoot() async {
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+  }
+
   Future<CompletionGetSuggestionDetails2Result> _getCodeDetails({
     required String path,
     required String content,
@@ -1961,6 +1911,11 @@
     ]);
   }
 
+  Future<void> _configureWithWorkspaceRoot() async {
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+  }
+
   Future<CompletionResponseForTesting> _getCodeSuggestions({
     required String path,
     required String content,
@@ -2940,156 +2895,6 @@
   }
 }
 
-class PubPackageAnalysisServerTest with ResourceProviderMixin {
-  late final MockServerChannel serverChannel;
-  late final AnalysisServer server;
-
-  AnalysisDomainHandler get analysisDomain {
-    return server.handlers.whereType<AnalysisDomainHandler>().single;
-  }
-
-  CompletionDomainHandler get completionDomain {
-    return server.handlers.whereType<CompletionDomainHandler>().single;
-  }
-
-  List<String> get experiments => [
-        EnableString.enhanced_enums,
-        EnableString.named_arguments_anywhere,
-        EnableString.super_parameters,
-      ];
-
-  String get testFileContent => getFile(testFilePath).readAsStringSync();
-
-  String get testFilePath => '$testPackageLibPath/test.dart';
-
-  String get testFilePathPlatform => convertPath(testFilePath);
-
-  String get testPackageLibPath => '$testPackageRootPath/lib';
-
-  Folder get testPackageRoot => getFolder(testPackageRootPath);
-
-  String get testPackageRootPath => '$workspaceRootPath/test';
-
-  String get testPackageTestPath => '$testPackageRootPath/test';
-
-  String get workspaceRootPath => '/home';
-
-  void deleteTestPackageAnalysisOptionsFile() {
-    deleteAnalysisOptionsYamlFile(testPackageRootPath);
-  }
-
-  void deleteTestPackageConfigJsonFile() {
-    deletePackageConfigJsonFile(testPackageRootPath);
-  }
-
-  Future<Response> handleRequest(Request request) async {
-    return await serverChannel.sendRequest(request);
-  }
-
-  /// Validates that the given [request] is handled successfully.
-  Future<Response> handleSuccessfulRequest(Request request) async {
-    var response = await handleRequest(request);
-    expect(response, isResponseSuccess(request.id));
-    return response;
-  }
-
-  void processNotification(Notification notification) {}
-
-  Future<void> setRoots({
-    required List<String> included,
-    required List<String> excluded,
-  }) async {
-    var includedConverted = included.map(convertPath).toList();
-    var excludedConverted = excluded.map(convertPath).toList();
-    await handleSuccessfulRequest(
-      AnalysisSetAnalysisRootsParams(
-        includedConverted,
-        excludedConverted,
-        packageRoots: {},
-      ).toRequest('0'),
-    );
-  }
-
-  @mustCallSuper
-  void setUp() {
-    serverChannel = MockServerChannel();
-
-    var sdkRoot = newFolder('/sdk');
-    createMockSdk(
-      resourceProvider: resourceProvider,
-      root: sdkRoot,
-    );
-
-    writeTestPackageConfig();
-
-    writeTestPackageAnalysisOptionsFile(
-      AnalysisOptionsFileConfig(
-        experiments: experiments,
-      ),
-    );
-
-    serverChannel.notifications.listen(processNotification);
-
-    server = AnalysisServer(
-      serverChannel,
-      resourceProvider,
-      AnalysisServerOptions(),
-      DartSdkManager(sdkRoot.path),
-      CrashReportingAttachmentsBuilder.empty,
-      InstrumentationService.NULL_SERVICE,
-    );
-
-    server.pendingFilesRemoveOverlayDelay = const Duration(milliseconds: 10);
-    completionDomain.budgetDuration = const Duration(seconds: 30);
-  }
-
-  Future<void> tearDown() async {
-    await server.dispose();
-  }
-
-  void writePackageConfig(Folder root, PackageConfigFileBuilder config) {
-    newPackageConfigJsonFile(
-      root.path,
-      config.toContent(toUriStr: toUriStr),
-    );
-  }
-
-  void writeTestPackageAnalysisOptionsFile(AnalysisOptionsFileConfig config) {
-    newAnalysisOptionsYamlFile2(
-      testPackageRootPath,
-      config.toContent(),
-    );
-  }
-
-  void writeTestPackageConfig({
-    PackageConfigFileBuilder? config,
-    String? languageVersion,
-  }) {
-    if (config == null) {
-      config = PackageConfigFileBuilder();
-    } else {
-      config = config.copy();
-    }
-
-    config.add(
-      name: 'test',
-      rootPath: testPackageRootPath,
-      languageVersion: languageVersion,
-    );
-
-    writePackageConfig(testPackageRoot, config);
-  }
-
-  void writeTestPackagePubspecYamlFile(String content) {
-    newPubspecYamlFile(testPackageRootPath, content);
-  }
-
-  Future<void> _configureWithWorkspaceRoot() async {
-    await setRoots(included: [workspaceRootPath], excluded: []);
-    await server.onAnalysisComplete;
-  }
-}
-
 class RequestWithFutureResponse {
   final int offset;
   final Request request;
diff --git a/pkg/analysis_server/test/edit/format_if_enabled_test.dart b/pkg/analysis_server/test/edit/format_if_enabled_test.dart
new file mode 100644
index 0000000..df10b41
--- /dev/null
+++ b/pkg/analysis_server/test/edit/format_if_enabled_test.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2022, 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.
+
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/edit/edit_domain.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../analysis_abstract.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FormatIfEnabledTest);
+  });
+}
+
+@reflectiveTest
+class FormatIfEnabledTest extends AbstractAnalysisTest {
+  @override
+  Future<void> setUp() async {
+    super.setUp();
+    await createProject();
+    handler = EditDomainHandler(server);
+  }
+
+  Future<void> test_enabled() async {
+    newAnalysisOptionsYamlFile2(testFolder, '''
+code-style:
+  format: true
+''');
+    addTestFile('''
+void f() { int x = 3; }
+''');
+    newFile2('$testFolder/a.dart', '''
+class A { A(); }
+''');
+    var edits = await _format();
+    expect(edits, isNotNull);
+    expect(edits, hasLength(2));
+  }
+
+  Future<void> test_notEnabled() async {
+    addTestFile('''
+void f() { int x = 3; }
+''');
+    var edits = await _format();
+    expect(edits, isNotNull);
+    expect(edits, hasLength(0));
+  }
+
+  Future<void> test_withErrors() async {
+    addTestFile('''
+void f() { int x =
+''');
+    var edits = await _format();
+    expect(edits, isNotNull);
+    expect(edits, hasLength(0));
+  }
+
+  Future<List<SourceFileEdit>> _format() async {
+    await waitForTasksFinished();
+    var request = EditFormatIfEnabledParams([testFolder]).toRequest('0');
+    var response = await waitResponse(request);
+    return EditFormatIfEnabledResult.fromResponse(response).edits;
+  }
+}
diff --git a/pkg/analysis_server/test/edit/test_all.dart b/pkg/analysis_server/test/edit/test_all.dart
index 21cf0bc..69ec29c 100644
--- a/pkg/analysis_server/test/edit/test_all.dart
+++ b/pkg/analysis_server/test/edit/test_all.dart
@@ -7,6 +7,7 @@
 import 'assists_test.dart' as assists;
 import 'bulk_fixes_test.dart' as bulk_fixes;
 import 'fixes_test.dart' as fixes;
+import 'format_if_enabled_test.dart' as format_if_enabled;
 import 'format_test.dart' as format;
 import 'organize_directives_test.dart' as organize_directives;
 import 'postfix_completion_test.dart' as postfix_completion;
@@ -20,6 +21,7 @@
     bulk_fixes.main();
     fixes.main();
     format.main();
+    format_if_enabled.main();
     organize_directives.main();
     postfix_completion.main();
     refactoring.main();
diff --git a/pkg/analysis_server/test/integration/coverage.md b/pkg/analysis_server/test/integration/coverage.md
index 9cd7a76..c8b21e4 100644
--- a/pkg/analysis_server/test/integration/coverage.md
+++ b/pkg/analysis_server/test/integration/coverage.md
@@ -47,6 +47,7 @@
 ## edit domain
 - [x] edit.bulkFixes
 - [x] edit.format
+- [ ] edit.formatIfEnabled
 - [x] edit.getAssists
 - [x] edit.getAvailableRefactorings
 - [x] edit.getFixes
diff --git a/pkg/analysis_server/test/integration/support/integration_test_methods.dart b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
index bf671b2..e577b4f 100644
--- a/pkg/analysis_server/test/integration/support/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/support/integration_test_methods.dart
@@ -1610,6 +1610,36 @@
     return EditFormatResult.fromJson(decoder, 'result', result);
   }
 
+  /// Format the contents of the files in one or more directories, but only if
+  /// the analysis options file for those files has enabled the 'format'
+  /// option.
+  ///
+  /// If any of the specified directories does not exist, that directory will
+  /// be ignored. If any of the files that are eligible for being formatted
+  /// cannot be formatted because of a syntax error in the file, that file will
+  /// be ignored.
+  ///
+  /// Parameters
+  ///
+  /// directories: List<FilePath>
+  ///
+  ///   The paths of the directories containing the code to be formatted.
+  ///
+  /// Returns
+  ///
+  /// edits: List<SourceFileEdit>
+  ///
+  ///   The edit(s) to be applied in order to format the code. The list will be
+  ///   empty if none of the files were formatted, whether because they were
+  ///   not eligible to be formatted or because they were already formatted.
+  Future<EditFormatIfEnabledResult> sendEditFormatIfEnabled(
+      List<String> directories) async {
+    var params = EditFormatIfEnabledParams(directories).toJson();
+    var result = await server.send('edit.formatIfEnabled', params);
+    var decoder = ResponseDecoder(null);
+    return EditFormatIfEnabledResult.fromJson(decoder, 'result', result);
+  }
+
   /// Return the set of assists that are available at the given location. An
   /// assist is distinguished from a refactoring primarily by the fact that it
   /// affects a single file and does not require user input in order to be
diff --git a/pkg/analysis_server/test/integration/support/protocol_matchers.dart b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
index ddf2b9b..84aeaf6 100644
--- a/pkg/analysis_server/test/integration/support/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/support/protocol_matchers.dart
@@ -2314,6 +2314,22 @@
     'edit.bulkFixes result',
     {'edits': isListOf(isSourceFileEdit), 'details': isListOf(isBulkFix)}));
 
+/// edit.formatIfEnabled params
+///
+/// {
+///   "directories": List<FilePath>
+/// }
+final Matcher isEditFormatIfEnabledParams = LazyMatcher(() => MatchesJsonObject(
+    'edit.formatIfEnabled params', {'directories': isListOf(isFilePath)}));
+
+/// edit.formatIfEnabled result
+///
+/// {
+///   "edits": List<SourceFileEdit>
+/// }
+final Matcher isEditFormatIfEnabledResult = LazyMatcher(() => MatchesJsonObject(
+    'edit.formatIfEnabled result', {'edits': isListOf(isSourceFileEdit)}));
+
 /// edit.format params
 ///
 /// {
diff --git a/pkg/analysis_server/test/lsp/definition_test.dart b/pkg/analysis_server/test/lsp/definition_test.dart
index 1a5e7ee..c8762403 100644
--- a/pkg/analysis_server/test/lsp/definition_test.dart
+++ b/pkg/analysis_server/test/lsp/definition_test.dart
@@ -75,6 +75,34 @@
     expect(res, hasLength(0));
   }
 
+  Future<void> test_constructor() async {
+    final contents = '''
+f() {
+  final a = A^();
+}
+
+class A {
+  [[A]]();
+}
+''';
+
+    await testContents(contents);
+  }
+
+  Future<void> test_constructor_named() async {
+    final contents = '''
+f() {
+  final a = A.named^();
+}
+
+class A {
+  A.[[named]]();
+}
+''';
+
+    await testContents(contents);
+  }
+
   Future<void> test_fromPlugins() async {
     final pluginAnalyzedFilePath = join(projectFolderPath, 'lib', 'foo.foo');
     final pluginAnalyzedFileUri = Uri.file(pluginAnalyzedFilePath);
@@ -102,6 +130,16 @@
     expect(loc.uri, equals(pluginAnalyzedFileUri.toString()));
   }
 
+  Future<void> test_function() async {
+    final contents = '''
+[[foo]]() {
+  fo^o();
+}
+''';
+
+    await testContents(contents);
+  }
+
   Future<void> test_locationLink_field() async {
     final mainContents = '''
     import 'referenced.dart';
@@ -248,54 +286,33 @@
 
   Future<void> test_sameLine() async {
     final contents = '''
-    int plusOne(int [[value]]) => 1 + val^ue;
-    ''';
+int plusOne(int [[value]]) => 1 + val^ue;
+''';
 
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(contents));
-    final res = await getDefinitionAsLocation(
-        mainFileUri, positionFromMarker(contents));
-
-    expect(res, hasLength(1));
-    var loc = res.single;
-    expect(loc.range, equals(rangeFromMarkers(contents)));
-    expect(loc.uri, equals(mainFileUri.toString()));
+    await testContents(contents);
   }
 
-  Future<void> test_singleFile() async {
+  Future<void> test_type() async {
     final contents = '''
-    [[foo]]() {
-      fo^o();
-    }
-    ''';
+f() {
+  final a = A^;
+}
 
-    await initialize();
-    await openFile(mainFileUri, withoutMarkers(contents));
-    final res = await getDefinitionAsLocation(
-        mainFileUri, positionFromMarker(contents));
+class [[A]] {}
+''';
 
-    expect(res, hasLength(1));
-    var loc = res.single;
-    expect(loc.range, equals(rangeFromMarkers(contents)));
-    expect(loc.uri, equals(mainFileUri.toString()));
+    await testContents(contents);
   }
 
   Future<void> test_unopenFile() async {
     final contents = '''
-    [[foo]]() {
-      fo^o();
-    }
-    ''';
+[[foo]]() {
+  fo^o();
+}
+''';
 
     newFile2(mainFilePath, withoutMarkers(contents));
-    await initialize();
-    final res = await getDefinitionAsLocation(
-        mainFileUri, positionFromMarker(contents));
-
-    expect(res, hasLength(1));
-    var loc = res.single;
-    expect(loc.range, equals(rangeFromMarkers(contents)));
-    expect(loc.uri, equals(mainFileUri.toString()));
+    await testContents(contents, inOpenFile: false);
   }
 
   Future<void> test_varKeyword() async {
@@ -305,8 +322,16 @@
     class [[MyClass]] {}
     ''';
 
+    await testContents(contents);
+  }
+
+  /// Expects definitions at the location of `^` in [contents] will navigate to
+  /// the range in `[[` brackets `]]` in `[contents].
+  Future<void> testContents(String contents, {bool inOpenFile = true}) async {
     await initialize();
-    await openFile(mainFileUri, withoutMarkers(contents));
+    if (inOpenFile) {
+      await openFile(mainFileUri, withoutMarkers(contents));
+    }
     final res = await getDefinitionAsLocation(
         mainFileUri, positionFromMarker(contents));
 
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index 3b99787..65ddf2f 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -192,7 +192,7 @@
   Future<void> test_class_constructors() async {
     final content = '''
     class MyClass {
-      MyClass();
+      const MyClass();
       MyClass.named();
       factory MyClass.factory() => MyClass();
     }
@@ -201,11 +201,13 @@
     final b = MyClass.named();
     final c = MyClass.factory();
     final d = MyClass.named;
+    const e = const MyClass();
     ''';
 
     final expected = [
       _Token('class', SemanticTokenTypes.keyword),
       _Token('MyClass', SemanticTokenTypes.class_),
+      _Token('const', SemanticTokenTypes.keyword),
       _Token('MyClass', SemanticTokenTypes.class_),
       _Token('MyClass', SemanticTokenTypes.class_),
       _Token('named', SemanticTokenTypes.method,
@@ -241,6 +243,12 @@
       _Token('MyClass', SemanticTokenTypes.class_),
       _Token('named', SemanticTokenTypes.method,
           [CustomSemanticTokenModifiers.constructor]),
+      _Token('const', SemanticTokenTypes.keyword),
+      _Token('e', SemanticTokenTypes.property,
+          [SemanticTokenModifiers.declaration]),
+      _Token('const', SemanticTokenTypes.keyword),
+      _Token('MyClass', SemanticTokenTypes.class_,
+          [CustomSemanticTokenModifiers.constructor]),
     ];
 
     await initialize();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart b/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart
index 94cd67f..0c4eaa4 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/convert_to_if_null_test.dart
@@ -46,6 +46,23 @@
   @override
   String get lintCode => LintNames.prefer_if_null_operators;
 
+  Future<void> test_conditional_expression() async {
+    await resolveTestCode('''
+void f(bool multiline, int? maxLines) {
+  var lines = maxLines != null
+      ? maxLines
+      : multiline ? 5 : 1;
+  print(lines);
+}
+''');
+    await assertHasFix('''
+void f(bool multiline, int? maxLines) {
+  var lines = maxLines ?? (multiline ? 5 : 1);
+  print(lines);
+}
+''');
+  }
+
   Future<void> test_equalEqual() async {
     await resolveTestCode('''
 void f(String? s) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
index 4da84b2..de94b4b 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
@@ -30,6 +30,14 @@
         content);
   }
 
+  /// Add the file in the SDK containing the data used by the data-driven fix
+  /// with the given [content].
+  void addSdkDataFile(String content) {
+    newFile2(
+        '${sdkRoot.path}/lib/_internal/${TransformSetManager.dataFileName}',
+        content);
+  }
+
   /// Return a code template that will produce the given [text].
   CodeTemplate codeTemplate(String text) {
     return CodeTemplate(
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart
index eb13dcf..a9fac6c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart
@@ -163,4 +163,36 @@
 void f(New o) {}
 ''', errorFilter: ignoreUnusedImport);
   }
+
+  Future<void> test_replaceBy() async {
+    addSdkDataFile('''
+version: 1
+transforms:
+  - title: "Replace with 'FileMode.read'"
+    date: 2021-09-21
+    element:
+      uris: [ 'dart:io' ]
+      variable: 'READ'
+    changes:
+      - kind: 'replacedBy'
+        newElement:
+          uris: [ 'dart:io' ]
+          inClass: 'FileMode'
+          field: 'read'
+''');
+    await resolveTestCode('''
+import 'dart:io';
+
+int f() {
+  return READ;
+}
+''');
+    await assertHasFix('''
+import 'dart:io';
+
+int f() {
+  return FileMode.read;
+}
+''', errorFilter: ignoreUnusedImport);
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart
index 49604dc..181cf6d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/sdk_fix_test.dart
@@ -2,7 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'data_driven_test_support.dart';
@@ -16,12 +15,6 @@
 }
 
 class AbstractSdkFixTest extends DataDrivenFixProcessorTest {
-  void addSdkDataFile(String content) {
-    newFile2(
-        '${sdkRoot.path}/lib/_internal/${TransformSetManager.dataFileName}',
-        content);
-  }
-
   @override
   void setUp() {
     addSdkDataFile('''
diff --git a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
index d2dda69..d8f6a6c 100644
--- a/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
+++ b/pkg/analysis_server/tool/spec/generated/java/AnalysisServer.java
@@ -542,6 +542,20 @@
   public void edit_format(String file, int selectionOffset, int selectionLength, int lineLength, FormatConsumer consumer);
 
   /**
+   * {@code edit.formatIfEnabled}
+   *
+   * Format the contents of the files in one or more directories, but only if the analysis options
+   * file for those files has enabled the 'format' option.
+   *
+   * If any of the specified directories does not exist, that directory will be ignored. If any of
+   * the files that are eligible for being formatted cannot be formatted because of a syntax error in
+   * the file, that file will be ignored.
+   *
+   * @param directories The paths of the directories containing the code to be formatted.
+   */
+  public void edit_formatIfEnabled(List<String> directories, FormatIfEnabledConsumer consumer);
+
+  /**
    * {@code edit.getAssists}
    *
    * Return the set of assists that are available at the given location. An assist is distinguished
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 5c07676..d1dbf063 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -2272,6 +2272,41 @@
       </field>
     </result>
   </request>
+  <request method="formatIfEnabled" experimental="true">
+    <p>
+      Format the contents of the files in one or more directories, but only if
+      the analysis options file for those files has enabled the 'format' option.
+    </p>
+    <p>
+      If any of the specified directories does not exist, that directory will be
+      ignored. If any of the files that are eligible for being formatted cannot
+      be formatted because of a syntax error in the file, that file will be
+      ignored.
+    </p>
+    <params>
+      <field name="directories">
+        <list>
+          <ref>FilePath</ref>
+        </list>
+        <p>
+          The paths of the directories containing the code to be formatted.
+        </p>
+      </field>
+    </params>
+    <result>
+      <field name="edits">
+        <list>
+          <ref>SourceFileEdit</ref>
+        </list>
+        <p>
+          The edit(s) to be applied in order to format the code. The list will
+          be empty if none of the files were formatted, whether because they
+          were not eligible to be formatted or because they were already
+          formatted.
+        </p>
+      </field>
+    </result>
+  </request>
   <request method="getAssists">
     <p>
       Return the set of assists that are available at the given
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
index e8a4e7e..0a14c4f 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_constants.dart
@@ -194,6 +194,8 @@
 const String EDIT_REQUEST_BULK_FIXES_IN_TEST_MODE = 'inTestMode';
 const String EDIT_REQUEST_FORMAT = 'edit.format';
 const String EDIT_REQUEST_FORMAT_FILE = 'file';
+const String EDIT_REQUEST_FORMAT_IF_ENABLED = 'edit.formatIfEnabled';
+const String EDIT_REQUEST_FORMAT_IF_ENABLED_DIRECTORIES = 'directories';
 const String EDIT_REQUEST_FORMAT_LINE_LENGTH = 'lineLength';
 const String EDIT_REQUEST_FORMAT_SELECTION_LENGTH = 'selectionLength';
 const String EDIT_REQUEST_FORMAT_SELECTION_OFFSET = 'selectionOffset';
@@ -242,6 +244,7 @@
 const String EDIT_RESPONSE_BULK_FIXES_DETAILS = 'details';
 const String EDIT_RESPONSE_BULK_FIXES_EDITS = 'edits';
 const String EDIT_RESPONSE_FORMAT_EDITS = 'edits';
+const String EDIT_RESPONSE_FORMAT_IF_ENABLED_EDITS = 'edits';
 const String EDIT_RESPONSE_FORMAT_SELECTION_LENGTH = 'selectionLength';
 const String EDIT_RESPONSE_FORMAT_SELECTION_OFFSET = 'selectionOffset';
 const String EDIT_RESPONSE_GET_ASSISTS_ASSISTS = 'assists';
diff --git a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
index 58d9f35..f4bb221 100644
--- a/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
+++ b/pkg/analysis_server_client/lib/src/protocol/protocol_generated.dart
@@ -6258,6 +6258,140 @@
       );
 }
 
+/// edit.formatIfEnabled params
+///
+/// {
+///   "directories": List<FilePath>
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class EditFormatIfEnabledParams implements RequestParams {
+  /// The paths of the directories containing the code to be formatted.
+  List<String> directories;
+
+  EditFormatIfEnabledParams(this.directories);
+
+  factory EditFormatIfEnabledParams.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      List<String> directories;
+      if (json.containsKey('directories')) {
+        directories = jsonDecoder.decodeList(jsonPath + '.directories',
+            json['directories'], jsonDecoder.decodeString);
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'directories');
+      }
+      return EditFormatIfEnabledParams(directories);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, 'edit.formatIfEnabled params', json);
+    }
+  }
+
+  factory EditFormatIfEnabledParams.fromRequest(Request request) {
+    return EditFormatIfEnabledParams.fromJson(
+        RequestDecoder(request), 'params', request.params);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['directories'] = directories;
+    return result;
+  }
+
+  @override
+  Request toRequest(String id) {
+    return Request(id, 'edit.formatIfEnabled', toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is EditFormatIfEnabledParams) {
+      return listEqual(
+          directories, other.directories, (String a, String b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => directories.hashCode;
+}
+
+/// edit.formatIfEnabled result
+///
+/// {
+///   "edits": List<SourceFileEdit>
+/// }
+///
+/// Clients may not extend, implement or mix-in this class.
+class EditFormatIfEnabledResult implements ResponseResult {
+  /// The edit(s) to be applied in order to format the code. The list will be
+  /// empty if none of the files were formatted, whether because they were not
+  /// eligible to be formatted or because they were already formatted.
+  List<SourceFileEdit> edits;
+
+  EditFormatIfEnabledResult(this.edits);
+
+  factory EditFormatIfEnabledResult.fromJson(
+      JsonDecoder jsonDecoder, String jsonPath, Object? json) {
+    json ??= {};
+    if (json is Map) {
+      List<SourceFileEdit> edits;
+      if (json.containsKey('edits')) {
+        edits = jsonDecoder.decodeList(
+            jsonPath + '.edits',
+            json['edits'],
+            (String jsonPath, Object? json) =>
+                SourceFileEdit.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.mismatch(jsonPath, 'edits');
+      }
+      return EditFormatIfEnabledResult(edits);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, 'edit.formatIfEnabled result', json);
+    }
+  }
+
+  factory EditFormatIfEnabledResult.fromResponse(Response response) {
+    return EditFormatIfEnabledResult.fromJson(
+        ResponseDecoder(REQUEST_ID_REFACTORING_KINDS.remove(response.id)),
+        'result',
+        response.result);
+  }
+
+  @override
+  Map<String, Object> toJson() {
+    var result = <String, Object>{};
+    result['edits'] =
+        edits.map((SourceFileEdit value) => value.toJson()).toList();
+    return result;
+  }
+
+  @override
+  Response toResponse(String id) {
+    return Response(id, result: toJson());
+  }
+
+  @override
+  String toString() => json.encode(toJson());
+
+  @override
+  bool operator ==(other) {
+    if (other is EditFormatIfEnabledResult) {
+      return listEqual(
+          edits, other.edits, (SourceFileEdit a, SourceFileEdit b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode => edits.hashCode;
+}
+
 /// edit.format params
 ///
 /// {
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index c138f7c..627f80a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1367,7 +1367,7 @@
   @override
   int get nameLength {
     final nameEnd = this.nameEnd;
-    if (nameEnd == null || periodOffset == null) {
+    if (nameEnd == null) {
       return 0;
     } else {
       return nameEnd - nameOffset;
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index 7287b59..bf0f7e8 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -45,7 +45,10 @@
   }
 
   void _addGetter(Element element) {
-    _addTo(_getters, element);
+    var id = element.name;
+    if (id != null) {
+      _getters[id] ??= element;
+    }
   }
 
   void _addPropertyAccessor(PropertyAccessorElement element) {
@@ -57,12 +60,11 @@
   }
 
   void _addSetter(Element element) {
-    _addTo(_setters, element);
-  }
-
-  void _addTo(Map<String, Element> map, Element element) {
-    var id = element.displayName;
-    map[id] ??= element;
+    var name = element.name;
+    if (name != null && name.endsWith('=')) {
+      var id = name.substring(0, name.length - 1);
+      _setters[id] ??= element;
+    }
   }
 }
 
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index ed7b814..5670310 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -180,16 +180,15 @@
 
   /// Looks for references to the given Element. All the files currently
   ///  cached by the resolver are searched, generated files are ignored.
-  @Deprecated('Use findReferences2() instead')
-  List<CiderSearchMatch> findReferences(Element element,
-      {OperationPerformanceImpl? performance}) {
-    return logger.run('findReferences for ${element.name}', () {
+  Future<List<CiderSearchMatch>> findReferences2(Element element,
+      {OperationPerformanceImpl? performance}) async {
+    return logger.runAsync('findReferences for ${element.name}', () async {
       var references = <CiderSearchMatch>[];
 
-      void collectReferences(
-          String path, OperationPerformanceImpl performance) {
-        performance.run('collectReferences', (_) {
-          var resolved = resolve(path: path);
+      Future<void> collectReferences2(
+          String path, OperationPerformanceImpl performance) async {
+        await performance.runAsync('collectReferences', (_) async {
+          var resolved = await resolve2(path: path);
           var collector = ReferencesCollector(element);
           resolved.unit.accept(collector);
           var offsets = collector.offsets;
@@ -208,40 +207,28 @@
       // TODO(keertip): check if element is named constructor.
       if (element is LocalVariableElement ||
           (element is ParameterElement && !element.isNamed)) {
-        collectReferences(element.source!.fullName, performance!);
+        await collectReferences2(element.source!.fullName, performance!);
       } else {
         var result = performance!.run('getFilesContaining', (performance) {
           return fsState!.getFilesContaining(element.displayName);
         });
         for (var filePath in result) {
-          collectReferences(filePath, performance!);
+          await collectReferences2(filePath, performance!);
         }
       }
       return references;
     });
   }
 
-  /// Looks for references to the given Element. All the files currently
-  ///  cached by the resolver are searched, generated files are ignored.
-  Future<List<CiderSearchMatch>> findReferences2(Element element,
-      {OperationPerformanceImpl? performance}) async {
-    // ignore: deprecated_member_use_from_same_package
-    return findReferences(
-      element,
-      performance: performance,
-    );
-  }
-
-  @Deprecated('Use getErrors2() instead')
-  ErrorsResult getErrors({
+  Future<ErrorsResult> getErrors2({
     required String path,
     OperationPerformanceImpl? performance,
-  }) {
+  }) async {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     performance ??= OperationPerformanceImpl('<default>');
 
-    return logger.run('Get errors for $path', () {
+    return logger.runAsync('Get errors for $path', () async {
       var fileContext = getFileContext(
         path: path,
         performance: performance!,
@@ -264,7 +251,7 @@
       }
 
       if (errors == null) {
-        var unitResult = resolve(
+        var unitResult = await resolve2(
           path: path,
           performance: performance,
         );
@@ -288,17 +275,6 @@
     });
   }
 
-  Future<ErrorsResult> getErrors2({
-    required String path,
-    OperationPerformanceImpl? performance,
-  }) async {
-    // ignore: deprecated_member_use_from_same_package
-    return getErrors(
-      path: path,
-      performance: performance,
-    );
-  }
-
   FileContext getFileContext({
     required String path,
     required OperationPerformanceImpl performance,
@@ -335,11 +311,10 @@
     return fsState.getFilesWithTopLevelDeclarations(name);
   }
 
-  @Deprecated('Use getLibraryByUri2() instead')
-  LibraryElement getLibraryByUri({
+  Future<LibraryElement> getLibraryByUri2({
     required String uriStr,
     OperationPerformanceImpl? performance,
-  }) {
+  }) async {
     performance ??= OperationPerformanceImpl('<default>');
 
     var uri = Uri.parse(uriStr);
@@ -359,8 +334,8 @@
       throw ArgumentError('$uri is not a library.');
     }
 
-    performance.run('libraryContext', (performance) {
-      libraryContext!.load2(
+    await performance.runAsync('libraryContext', (performance) async {
+      await libraryContext!.load(
         targetLibrary: file,
         performance: performance,
       );
@@ -369,17 +344,6 @@
     return libraryContext!.elementFactory.libraryOfUri2(uriStr);
   }
 
-  Future<LibraryElement> getLibraryByUri2({
-    required String uriStr,
-    OperationPerformanceImpl? performance,
-  }) async {
-    // ignore: deprecated_member_use_from_same_package
-    return getLibraryByUri(
-      uriStr: uriStr,
-      performance: performance,
-    );
-  }
-
   String getLibraryLinkedSignature({
     required String path,
     required OperationPerformanceImpl performance,
@@ -411,12 +375,11 @@
   ///
   /// This method ensures that we discard the libraries context, with all its
   /// partially resynthesized data, and so prepare for loading linked summaries
-  /// from bytes, which will be done by [getErrors]. It is OK for it to
+  /// from bytes, which will be done by [getErrors2]. It is OK for it to
   /// spend some more time on this.
-  @Deprecated('Use linkLibraries2() instead')
-  void linkLibraries({
+  Future<void> linkLibraries2({
     required String path,
-  }) {
+  }) async {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     var performance = OperationPerformanceImpl('<unused>');
@@ -428,7 +391,7 @@
     var file = fileContext.file;
     var libraryFile = file.partOfLibrary ?? file;
 
-    libraryContext!.load2(
+    await libraryContext!.load(
       targetLibrary: libraryFile,
       performance: performance,
     );
@@ -436,32 +399,6 @@
     _resetContextObjects();
   }
 
-  /// Ensure that libraries necessary for resolving [path] are linked.
-  ///
-  /// Libraries are linked in library cycles, from the bottom to top, so that
-  /// when we link a cycle, everything it transitively depends is ready. We
-  /// load newly linked libraries from bytes, and when we link a new library
-  /// cycle we partially resynthesize AST and elements from previously
-  /// loaded libraries.
-  ///
-  /// But when we are done linking libraries, and want to resolve just the
-  /// very top library that transitively depends on the whole dependency
-  /// tree, this library will not reference as many elements in the
-  /// dependencies as we needed for linking. Most probably it references
-  /// elements from directly imported libraries, and a couple of layers below.
-  /// So, keeping all previously resynthesized data is usually a waste.
-  ///
-  /// This method ensures that we discard the libraries context, with all its
-  /// partially resynthesized data, and so prepare for loading linked summaries
-  /// from bytes, which will be done by [getErrors2]. It is OK for it to
-  /// spend some more time on this.
-  Future<void> linkLibraries2({
-    required String path,
-  }) async {
-    // ignore: deprecated_member_use_from_same_package
-    linkLibraries(path: path);
-  }
-
   /// Update the cache with list of invalidated ids and clears [removedCacheIds].
   void releaseAndClearRemovedIds() {
     byteStore.release(removedCacheIds);
@@ -480,18 +417,17 @@
   }
 
   /// The [completionLine] and [completionColumn] are zero based.
-  @Deprecated('Use resolve2() instead')
-  ResolvedUnitResult resolve({
+  Future<ResolvedUnitResult> resolve2({
     int? completionLine,
     int? completionColumn,
     required String path,
     OperationPerformanceImpl? performance,
-  }) {
+  }) async {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     performance ??= OperationPerformanceImpl('<default>');
 
-    return logger.run('Resolve $path', () {
+    return logger.runAsync('Resolve $path', () async {
       var fileContext = getFileContext(
         path: path,
         performance: performance!,
@@ -508,7 +444,7 @@
         }
       }
 
-      var libraryResult = resolveLibrary(
+      var libraryResult = await resolveLibrary2(
         completionLine: completionLine,
         completionColumn: completionColumn,
         path: libraryFile.path,
@@ -522,30 +458,13 @@
   }
 
   /// The [completionLine] and [completionColumn] are zero based.
-  Future<ResolvedUnitResult> resolve2({
-    int? completionLine,
-    int? completionColumn,
-    required String path,
-    OperationPerformanceImpl? performance,
-  }) async {
-    // ignore: deprecated_member_use_from_same_package
-    return resolve(
-      completionLine: completionLine,
-      completionColumn: completionColumn,
-      path: path,
-      performance: performance,
-    );
-  }
-
-  /// The [completionLine] and [completionColumn] are zero based.
-  @Deprecated('Use resolveLibrary2() instead')
-  ResolvedLibraryResult resolveLibrary({
+  Future<ResolvedLibraryResult> resolveLibrary2({
     int? completionLine,
     int? completionColumn,
     String? completionPath,
     required String path,
     OperationPerformanceImpl? performance,
-  }) {
+  }) async {
     _throwIfNotAbsoluteNormalizedPath(path);
 
     performance ??= OperationPerformanceImpl('<default>');
@@ -555,7 +474,7 @@
       return cachedResult;
     }
 
-    return logger.run('Resolve $path', () {
+    return logger.runAsync('Resolve $path', () async {
       var fileContext = getFileContext(
         path: path,
         performance: performance!,
@@ -578,8 +497,8 @@
         completionOffset = lineOffset + completionColumn;
       }
 
-      performance.run('libraryContext', (performance) {
-        libraryContext!.load2(
+      await performance.runAsync('libraryContext', (performance) async {
+        await libraryContext!.load(
           targetLibrary: libraryFile,
           performance: performance,
         );
@@ -651,24 +570,6 @@
     });
   }
 
-  /// The [completionLine] and [completionColumn] are zero based.
-  Future<ResolvedLibraryResult> resolveLibrary2({
-    int? completionLine,
-    int? completionColumn,
-    String? completionPath,
-    required String path,
-    OperationPerformanceImpl? performance,
-  }) async {
-    // ignore: deprecated_member_use_from_same_package
-    return resolveLibrary(
-      completionLine: completionLine,
-      completionColumn: completionColumn,
-      completionPath: completionPath,
-      path: path,
-      performance: performance,
-    );
-  }
-
   /// Make sure that [fsState], [contextObjects], and [libraryContext] are
   /// created and configured with the given [fileAnalysisOptions].
   ///
@@ -909,21 +810,23 @@
   }
 
   /// Load data required to access elements of the given [targetLibrary].
-  void load2({
+  Future<void> load({
     required FileState targetLibrary,
     required OperationPerformanceImpl performance,
-  }) {
+  }) async {
     var librariesLinked = 0;
     var librariesLinkedTimer = Stopwatch();
     var inputsTimer = Stopwatch();
 
-    void loadBundle(LibraryCycle cycle) {
+    Future<void> loadBundle(LibraryCycle cycle) async {
       if (!loadedBundles.add(cycle)) return;
 
       performance.getDataInt('cycleCount').increment();
       performance.getDataInt('libraryCount').add(cycle.libraries.length);
 
-      cycle.directDependencies.forEach(loadBundle);
+      for (var directDependency in cycle.directDependencies) {
+        await loadBundle(directDependency);
+      }
 
       var resolutionKey = '${cycle.cyclePathsHash}.resolution';
       var resolutionData = byteStore.get(resolutionKey, cycle.signature);
@@ -986,9 +889,7 @@
         }
         inputsTimer.stop();
 
-        // TODO(scheglov) Migrate when we are ready to switch to async.
-        // ignore: deprecated_member_use_from_same_package
-        var linkResult = link2.link(elementFactory, inputLibraries);
+        var linkResult = await link2.link2(elementFactory, inputLibraries);
         librariesLinked += cycle.libraries.length;
 
         resolutionBytes = linkResult.resolutionBytes;
@@ -1015,9 +916,9 @@
       _createElementFactoryTypeProvider();
     }
 
-    logger.run('Prepare linked bundles', () {
+    await logger.runAsync('Prepare linked bundles', () async {
       var libraryCycle = targetLibrary.libraryCycle;
-      loadBundle(libraryCycle);
+      await loadBundle(libraryCycle);
       logger.writeln(
         '[inputsTimer: ${inputsTimer.elapsedMilliseconds} ms]'
         '[librariesLinked: $librariesLinked]'
diff --git a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
index 2c9c197..f43c056 100644
--- a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
@@ -105,21 +105,21 @@
     constructorElement = _resolver.toLegacyElement(constructorElement);
     constructorName?.staticElement = constructorElement;
     node.element = constructorElement;
-    var annotationInferrer =
-        AnnotationInferrer(constructorName: constructorName);
 
     if (constructorElement == null) {
       _errorReporter.reportErrorForNode(
         CompileTimeErrorCode.INVALID_ANNOTATION,
         node,
       );
-      annotationInferrer.resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          argumentList: argumentList,
-          rawType: null,
-          contextType: null,
-          whyNotPromotedList: whyNotPromotedList);
+      AnnotationInferrer(
+              resolver: _resolver,
+              node: node,
+              argumentList: argumentList,
+              rawType: null,
+              contextType: null,
+              whyNotPromotedList: whyNotPromotedList,
+              constructorName: constructorName)
+          .resolveInvocation();
       return;
     }
 
@@ -129,13 +129,15 @@
     );
     var constructorRawType = elementToInfer.asType;
 
-    annotationInferrer.resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        argumentList: argumentList,
-        rawType: constructorRawType,
-        contextType: null,
-        whyNotPromotedList: whyNotPromotedList);
+    AnnotationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: constructorRawType,
+            contextType: null,
+            whyNotPromotedList: whyNotPromotedList,
+            constructorName: constructorName)
+        .resolveInvocation();
   }
 
   void _extensionGetter(
@@ -401,13 +403,15 @@
       AnnotationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList) {
     var arguments = node.arguments;
     if (arguments != null) {
-      AnnotationInferrer(constructorName: null).resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          argumentList: arguments,
-          rawType: null,
-          contextType: null,
-          whyNotPromotedList: whyNotPromotedList);
+      AnnotationInferrer(
+              resolver: _resolver,
+              node: node,
+              argumentList: arguments,
+              rawType: null,
+              contextType: null,
+              whyNotPromotedList: whyNotPromotedList,
+              constructorName: null)
+          .resolveInvocation();
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart
index d345b15..03d4601 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_expression_invocation_resolver.dart
@@ -115,15 +115,14 @@
   void _resolve(FunctionExpressionInvocationImpl node, FunctionType rawType,
       List<WhyNotPromotedGetter> whyNotPromotedList,
       {required DartType? contextType}) {
-    var returnType =
-        const FunctionExpressionInvocationInferrer().resolveInvocation(
+    var returnType = FunctionExpressionInvocationInferrer(
       resolver: _resolver,
       node: node,
       argumentList: node.argumentList,
       rawType: rawType,
       whyNotPromotedList: whyNotPromotedList,
       contextType: contextType,
-    );
+    ).resolveInvocation();
 
     _inferenceHelper.recordStaticType(node, returnType,
         contextType: contextType);
@@ -206,13 +205,14 @@
       List<WhyNotPromotedGetter> whyNotPromotedList,
       {required DartType? contextType}) {
     _setExplicitTypeArgumentTypes(node);
-    const FunctionExpressionInvocationInferrer().resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        argumentList: node.argumentList,
-        rawType: null,
-        contextType: contextType,
-        whyNotPromotedList: whyNotPromotedList);
+    FunctionExpressionInvocationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: null,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     node.staticInvokeType = DynamicTypeImpl.instance;
     node.staticType = type;
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart
index 74c6873..7445573 100644
--- a/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/instance_creation_expression_resolver.dart
@@ -62,13 +62,14 @@
       constructorName: constructorName,
       definingLibrary: _resolver.definingLibrary,
     );
-    const InstanceCreationInferrer().resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        argumentList: node.argumentList,
-        rawType: elementToInfer?.asType,
-        contextType: contextType,
-        whyNotPromotedList: whyNotPromotedList);
+    InstanceCreationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: elementToInfer?.asType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     _resolver.inferenceHelper.recordStaticType(
         node, node.constructorName.type.type!,
         contextType: contextType);
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index 4112fcde..495866a 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -170,14 +170,14 @@
     required List<WhyNotPromotedGetter> whyNotPromotedList,
     required DartType? contextType,
   }) {
-    var returnType = const MethodInvocationInferrer().resolveInvocation(
+    var returnType = MethodInvocationInferrer(
       resolver: _resolver,
       node: node,
       argumentList: node.argumentList,
       rawType: rawType,
       contextType: contextType,
       whyNotPromotedList: whyNotPromotedList,
-    );
+    ).resolveInvocation();
 
     recordStaticType(node, returnType, contextType: contextType);
   }
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
index 128c1cf..9026999 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inferrer.dart
@@ -26,28 +26,40 @@
   /// arguments filled in.
   final SimpleIdentifierImpl? constructorName;
 
-  AnnotationInferrer({required this.constructorName}) : super._();
+  AnnotationInferrer(
+      {required ResolverVisitor resolver,
+      required AnnotationImpl node,
+      required ArgumentListImpl argumentList,
+      required FunctionType? rawType,
+      required DartType? contextType,
+      required List<WhyNotPromotedGetter> whyNotPromotedList,
+      required this.constructorName})
+      : super._(
+            resolver: resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: rawType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList);
+
+  @override
+  bool get _isConst => true;
+
+  @override
+  bool get _isGenericInferenceDisabled => !resolver.genericMetadataIsEnabled;
 
   @override
   bool get _needsTypeArgumentBoundsCheck => true;
 
   @override
+  TypeArgumentListImpl? get _typeArguments => node.typeArguments;
+
+  @override
   ErrorCode get _wrongNumberOfTypeArgumentsErrorCode =>
       CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS;
 
   @override
-  bool _getIsConst(AnnotationImpl node) => true;
-
-  @override
-  TypeArgumentListImpl? _getTypeArguments(AnnotationImpl node) =>
-      node.typeArguments;
-
-  @override
-  bool _isGenericInferenceDisabled(ResolverVisitor resolver) =>
-      !resolver.genericMetadataIsEnabled;
-
-  @override
-  List<ParameterElement>? _storeResult(AnnotationImpl node,
+  List<ParameterElement>? _storeResult(
       List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
     if (invokeType != null) {
       var constructorElement = ConstructorMember.from(
@@ -66,28 +78,43 @@
 /// nodes that require full downward and upward inference.
 abstract class FullInvocationInferrer<Node extends AstNodeImpl>
     extends InvocationInferrer<Node> {
-  const FullInvocationInferrer._();
+  FullInvocationInferrer._(
+      {required ResolverVisitor resolver,
+      required Node node,
+      required ArgumentListImpl argumentList,
+      required FunctionType? rawType,
+      required DartType? contextType,
+      required List<WhyNotPromotedGetter> whyNotPromotedList})
+      : super(
+            resolver: resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: rawType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList);
+
+  AstNode get _errorNode => node;
+
+  bool get _isConst => false;
+
+  bool get _isGenericInferenceDisabled => false;
 
   bool get _needsTypeArgumentBoundsCheck => false;
 
+  TypeArgumentListImpl? get _typeArguments;
+
   ErrorCode get _wrongNumberOfTypeArgumentsErrorCode =>
       CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD;
 
   @override
-  DartType resolveInvocation({
-    required ResolverVisitor resolver,
-    required Node node,
-    required ArgumentListImpl argumentList,
-    required FunctionType? rawType,
-    required DartType? contextType,
-    required List<WhyNotPromotedGetter> whyNotPromotedList,
-  }) {
-    var typeArgumentList = _getTypeArguments(node);
+  DartType resolveInvocation() {
+    var typeArgumentList = _typeArguments;
+    var rawType = this.rawType;
 
     List<DartType>? typeArgumentTypes;
     GenericInferrer? inferrer;
     Substitution? substitution;
-    if (_isGenericInferenceDisabled(resolver)) {
+    if (_isGenericInferenceDisabled) {
       if (rawType != null && rawType.typeFormals.isNotEmpty) {
         typeArgumentTypes = List.filled(
           rawType.typeFormals.length,
@@ -103,7 +130,7 @@
           typeArgumentList.arguments.length != rawType.typeFormals.length) {
         var typeParameters = rawType.typeFormals;
         _reportWrongNumberOfTypeArguments(
-            resolver, typeArgumentList, rawType, typeParameters);
+            typeArgumentList, rawType, typeParameters);
         typeArgumentTypes = List.filled(
           typeParameters.length,
           DynamicTypeImpl.instance,
@@ -151,9 +178,9 @@
         typeParameters: rawType.typeFormals,
         declaredReturnType: rawType.returnType,
         contextReturnType: contextType,
-        isConst: _getIsConst(node),
+        isConst: _isConst,
         errorReporter: resolver.errorReporter,
-        errorNode: _getErrorNode(node),
+        errorNode: _errorNode,
         genericMetadataIsEnabled: resolver.genericMetadataIsEnabled,
       );
 
@@ -162,14 +189,9 @@
     }
 
     List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo =
-        _isIdentical(node) ? [] : null;
+        _isIdentical ? [] : null;
     var deferredClosures = _visitArguments(
-        resolver: resolver,
-        node: node,
-        argumentList: argumentList,
         rawType: rawType,
-        contextType: contextType,
-        whyNotPromotedList: whyNotPromotedList,
         identicalInfo: identicalInfo,
         substitution: substitution,
         inferrer: inferrer);
@@ -179,11 +201,7 @@
             rawType!.typeFormals, inferrer.partialInfer());
       }
       _resolveDeferredClosures(
-          resolver: resolver,
-          node: node,
-          argumentList: argumentList,
           rawType: rawType,
-          contextType: contextType,
           deferredClosures: deferredClosures,
           identicalInfo: identicalInfo,
           substitution: substitution,
@@ -197,7 +215,7 @@
         ? rawType?.instantiate(typeArgumentTypes)
         : rawType;
 
-    var parameters = _storeResult(node, typeArgumentTypes, invokeType);
+    var parameters = _storeResult(typeArgumentTypes, invokeType);
     if (parameters != null) {
       argumentList.correspondingStaticParameters =
           ResolverVisitor.resolveArgumentsToParameters(
@@ -207,32 +225,15 @@
       );
     }
     var returnType = _refineReturnType(
-        resolver, node, InvocationInferrer.computeInvokeReturnType(invokeType));
-    _recordIdenticalInfo(
-        resolver: resolver,
-        node: node,
-        argumentList: argumentList,
-        identicalInfo: identicalInfo);
+        InvocationInferrer.computeInvokeReturnType(invokeType));
+    _recordIdenticalInfo(identicalInfo);
     return returnType;
   }
 
-  AstNode _getErrorNode(Node node) => node;
+  DartType _refineReturnType(DartType returnType) => returnType;
 
-  bool _getIsConst(Node node) => false;
-
-  TypeArgumentListImpl? _getTypeArguments(Node node);
-
-  bool _isGenericInferenceDisabled(ResolverVisitor resolver) => false;
-
-  DartType _refineReturnType(
-          ResolverVisitor resolver, Node node, DartType returnType) =>
-      returnType;
-
-  void _reportWrongNumberOfTypeArguments(
-      ResolverVisitor resolver,
-      TypeArgumentList typeArgumentList,
-      FunctionType rawType,
-      List<TypeParameterElement> typeParameters) {
+  void _reportWrongNumberOfTypeArguments(TypeArgumentList typeArgumentList,
+      FunctionType rawType, List<TypeParameterElement> typeParameters) {
     resolver.errorReporter.reportErrorForNode(
       _wrongNumberOfTypeArgumentsErrorCode,
       typeArgumentList,
@@ -245,7 +246,7 @@
   }
 
   List<ParameterElement>? _storeResult(
-      Node node, List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+      List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
     return invokeType?.parameters;
   }
 }
@@ -254,47 +255,68 @@
 /// nodes of type [FunctionExpressionInvocation].
 class FunctionExpressionInvocationInferrer
     extends InvocationExpressionInferrer<FunctionExpressionInvocationImpl> {
-  const FunctionExpressionInvocationInferrer() : super._();
+  FunctionExpressionInvocationInferrer(
+      {required ResolverVisitor resolver,
+      required FunctionExpressionInvocationImpl node,
+      required ArgumentListImpl argumentList,
+      required FunctionType? rawType,
+      required DartType? contextType,
+      required List<WhyNotPromotedGetter> whyNotPromotedList})
+      : super._(
+            resolver: resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: rawType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList);
 
   @override
-  ExpressionImpl _getErrorNode(FunctionExpressionInvocationImpl node) =>
-      node.function;
+  ExpressionImpl get _errorNode => node.function;
 }
 
 /// Specialization of [InvocationInferrer] for performing type inference on AST
 /// nodes of type [InstanceCreationExpression].
 class InstanceCreationInferrer
     extends FullInvocationInferrer<InstanceCreationExpressionImpl> {
-  const InstanceCreationInferrer() : super._();
+  InstanceCreationInferrer(
+      {required ResolverVisitor resolver,
+      required InstanceCreationExpressionImpl node,
+      required ArgumentListImpl argumentList,
+      required FunctionType? rawType,
+      required DartType? contextType,
+      required List<WhyNotPromotedGetter> whyNotPromotedList})
+      : super._(
+            resolver: resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: rawType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList);
+
+  @override
+  ConstructorNameImpl get _errorNode => node.constructorName;
+
+  @override
+  bool get _isConst => node.isConst;
 
   @override
   bool get _needsTypeArgumentBoundsCheck => true;
 
   @override
-  ConstructorNameImpl _getErrorNode(InstanceCreationExpressionImpl node) =>
-      node.constructorName;
-
-  @override
-  bool _getIsConst(InstanceCreationExpressionImpl node) => node.isConst;
-
-  @override
-  TypeArgumentListImpl? _getTypeArguments(InstanceCreationExpressionImpl node) {
+  TypeArgumentListImpl? get _typeArguments {
     // For an instance creation expression the type arguments are on the
     // constructor name.
     return node.constructorName.type.typeArguments;
   }
 
   @override
-  void _reportWrongNumberOfTypeArguments(
-      ResolverVisitor resolver,
-      TypeArgumentList typeArgumentList,
-      FunctionType rawType,
-      List<TypeParameterElement> typeParameters) {
+  void _reportWrongNumberOfTypeArguments(TypeArgumentList typeArgumentList,
+      FunctionType rawType, List<TypeParameterElement> typeParameters) {
     // Error reporting for instance creations is done elsewhere.
   }
 
   @override
-  List<ParameterElement>? _storeResult(InstanceCreationExpressionImpl node,
+  List<ParameterElement>? _storeResult(
       List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
     if (invokeType != null) {
       var constructedType = invokeType.returnType;
@@ -315,20 +337,33 @@
 abstract class InvocationExpressionInferrer<
         Node extends InvocationExpressionImpl>
     extends FullInvocationInferrer<Node> {
-  const InvocationExpressionInferrer._() : super._();
+  InvocationExpressionInferrer._(
+      {required ResolverVisitor resolver,
+      required Node node,
+      required ArgumentListImpl argumentList,
+      required FunctionType? rawType,
+      required DartType? contextType,
+      required List<WhyNotPromotedGetter> whyNotPromotedList})
+      : super._(
+            resolver: resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: rawType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList);
 
   @override
-  Expression _getErrorNode(Node node) => node.function;
+  Expression get _errorNode => node.function;
 
   @override
-  TypeArgumentListImpl? _getTypeArguments(Node node) => node.typeArguments;
+  TypeArgumentListImpl? get _typeArguments => node.typeArguments;
 
   @override
   List<ParameterElement>? _storeResult(
-      Node node, List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
+      List<DartType>? typeArgumentTypes, FunctionType? invokeType) {
     node.typeArgumentTypes = typeArgumentTypes;
     node.staticInvokeType = invokeType ?? DynamicTypeImpl.instance;
-    return super._storeResult(node, typeArgumentTypes, invokeType);
+    return super._storeResult(typeArgumentTypes, invokeType);
   }
 }
 
@@ -338,34 +373,34 @@
 /// This class may be used directly for inference of [ExtensionOverride],
 /// [RedirectingConstructorInvocation], or [SuperConstructorInvocation].
 class InvocationInferrer<Node extends AstNodeImpl> {
-  const InvocationInferrer();
+  final ResolverVisitor resolver;
+  final Node node;
+  final ArgumentListImpl argumentList;
+  final FunctionType? rawType;
+  final DartType? contextType;
+  final List<WhyNotPromotedGetter> whyNotPromotedList;
 
-  /// Performs type inference on an invocation expression of type [Node].
-  /// [rawType] should be the type of the function the invocation is resolved to
-  /// (with type arguments not applied yet).
-  void resolveInvocation({
-    required ResolverVisitor resolver,
-    required Node node,
-    required ArgumentListImpl argumentList,
-    required FunctionType? rawType,
-    required DartType? contextType,
-    required List<WhyNotPromotedGetter> whyNotPromotedList,
-  }) {
-    var deferredClosures = _visitArguments(
-        resolver: resolver,
-        node: node,
-        argumentList: argumentList,
-        rawType: rawType,
-        contextType: contextType,
-        whyNotPromotedList: whyNotPromotedList);
+  /// Prepares to perform type inference on an invocation expression of type
+  /// [Node].  [rawType] should be the type of the function the invocation is
+  /// resolved to (with type arguments not applied yet).
+  InvocationInferrer(
+      {required this.resolver,
+      required this.node,
+      required this.argumentList,
+      required this.rawType,
+      required this.contextType,
+      required this.whyNotPromotedList});
+
+  /// Determines whether [node] is an invocation of the core function
+  /// `identical` (which needs special flow analysis treatment).
+  bool get _isIdentical => false;
+
+  /// Performs type inference on the invocation expression.
+  void resolveInvocation() {
+    var deferredClosures = _visitArguments(rawType: rawType);
     if (deferredClosures != null) {
       _resolveDeferredClosures(
-          resolver: resolver,
-          node: node,
-          argumentList: argumentList,
-          rawType: rawType,
-          contextType: contextType,
-          deferredClosures: deferredClosures);
+          rawType: rawType, deferredClosures: deferredClosures);
     }
   }
 
@@ -373,22 +408,12 @@
   /// argument of the invocation.  Usually this is just the type of the
   /// corresponding parameter, but it can be different for certain primitive
   /// numeric operations.
-  DartType? _computeContextForArgument(ResolverVisitor resolver, Node node,
-          DartType parameterType, DartType? methodInvocationContext) =>
-      parameterType;
-
-  /// Determines whether [node] is an invocation of the core function
-  /// `identical` (which needs special flow analysis treatment).
-  bool _isIdentical(Node node) => false;
+  DartType? _computeContextForArgument(DartType parameterType) => parameterType;
 
   /// If the invocation being processed is a call to `identical`, informs flow
   /// analysis about it, so that it can do appropriate promotions.
   void _recordIdenticalInfo(
-      {required ResolverVisitor resolver,
-      required Node node,
-      required ArgumentListImpl argumentList,
-      required List<EqualityInfo<PromotableElement, DartType>?>?
-          identicalInfo}) {
+      List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo) {
     var flow = resolver.flowAnalysis.flow;
     if (identicalInfo != null) {
       flow?.equalityOperation_end(argumentList.parent as Expression,
@@ -398,11 +423,7 @@
 
   /// Resolves any closures that were deferred by [_visitArguments].
   void _resolveDeferredClosures(
-      {required ResolverVisitor resolver,
-      required Node node,
-      required ArgumentListImpl argumentList,
-      required FunctionType? rawType,
-      required DartType? contextType,
+      {required FunctionType? rawType,
       required List<_DeferredClosure> deferredClosures,
       List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo,
       Substitution? substitution,
@@ -417,8 +438,7 @@
         if (substitution != null) {
           parameterType = substitution.substituteType(parameterType);
         }
-        parameterContextType = _computeContextForArgument(
-            resolver, node, parameterType, contextType);
+        parameterContextType = _computeContextForArgument(parameterType);
       }
       var argument = arguments[deferredArgument.index];
       resolver.analyzeExpression(argument, parameterContextType);
@@ -439,12 +459,7 @@
   /// be deferred due to the `inference-update-1` feature, a list of them is
   /// returned.
   List<_DeferredClosure>? _visitArguments(
-      {required ResolverVisitor resolver,
-      required Node node,
-      required ArgumentListImpl argumentList,
-      required FunctionType? rawType,
-      required DartType? contextType,
-      required List<WhyNotPromotedGetter> whyNotPromotedList,
+      {required FunctionType? rawType,
       List<EqualityInfo<PromotableElement, DartType>?>? identicalInfo,
       Substitution? substitution,
       GenericInferrer? inferrer}) {
@@ -498,8 +513,7 @@
           if (substitution != null) {
             parameterType = substitution.substituteType(parameterType);
           }
-          parameterContextType = _computeContextForArgument(
-              resolver, node, parameterType, contextType);
+          parameterContextType = _computeContextForArgument(parameterType);
         }
         resolver.analyzeExpression(argument, parameterContextType);
         // In case of rewrites, we need to grab the argument again.
@@ -533,29 +547,23 @@
 /// nodes of type [MethodInvocation].
 class MethodInvocationInferrer
     extends InvocationExpressionInferrer<MethodInvocationImpl> {
-  const MethodInvocationInferrer() : super._();
+  MethodInvocationInferrer(
+      {required ResolverVisitor resolver,
+      required MethodInvocationImpl node,
+      required ArgumentListImpl argumentList,
+      required FunctionType? rawType,
+      required DartType? contextType,
+      required List<WhyNotPromotedGetter> whyNotPromotedList})
+      : super._(
+            resolver: resolver,
+            node: node,
+            argumentList: argumentList,
+            rawType: rawType,
+            contextType: contextType,
+            whyNotPromotedList: whyNotPromotedList);
 
   @override
-  DartType? _computeContextForArgument(
-      ResolverVisitor resolver,
-      MethodInvocationImpl node,
-      DartType parameterType,
-      DartType? methodInvocationContext) {
-    var contextType = super._computeContextForArgument(
-        resolver, node, parameterType, methodInvocationContext);
-    var targetType = node.realTarget?.staticType;
-    if (targetType != null) {
-      contextType = resolver.typeSystem.refineNumericInvocationContext(
-          targetType,
-          node.methodName.staticElement,
-          methodInvocationContext,
-          parameterType);
-    }
-    return contextType;
-  }
-
-  @override
-  bool _isIdentical(MethodInvocationImpl node) {
+  bool get _isIdentical {
     var invokedMethod = node.methodName.staticElement;
     return invokedMethod is FunctionElement &&
         invokedMethod.isDartCoreIdentical &&
@@ -563,8 +571,21 @@
   }
 
   @override
-  DartType _refineReturnType(ResolverVisitor resolver,
-      MethodInvocationImpl node, DartType returnType) {
+  DartType? _computeContextForArgument(DartType parameterType) {
+    var argumentContextType = super._computeContextForArgument(parameterType);
+    var targetType = node.realTarget?.staticType;
+    if (targetType != null) {
+      argumentContextType = resolver.typeSystem.refineNumericInvocationContext(
+          targetType,
+          node.methodName.staticElement,
+          contextType,
+          parameterType);
+    }
+    return argumentContextType;
+  }
+
+  @override
+  DartType _refineReturnType(DartType returnType) {
     var targetType = node.realTarget?.staticType;
     if (targetType != null) {
       returnType = resolver.typeSystem.refineNumericInvocationType(
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index ebfd7d4..081bb5d 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -328,14 +328,14 @@
       MethodInvocationImpl node, List<WhyNotPromotedGetter> whyNotPromotedList,
       {required DartType? contextType}) {
     var rawType = node.methodName.staticType;
-    DartType staticStaticType = const MethodInvocationInferrer()
-        .resolveInvocation(
+    DartType staticStaticType = MethodInvocationInferrer(
             resolver: _resolver,
             node: node,
             argumentList: node.argumentList,
             rawType: rawType is FunctionType ? rawType : null,
             contextType: contextType,
-            whyNotPromotedList: whyNotPromotedList);
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     _inferenceHelper.recordStaticType(node, staticStaticType,
         contextType: contextType);
   }
@@ -474,13 +474,14 @@
     }
 
     _setExplicitTypeArgumentTypes();
-    const MethodInvocationInferrer().resolveInvocation(
-        resolver: _resolver,
-        node: node,
-        argumentList: node.argumentList,
-        rawType: rawType,
-        whyNotPromotedList: whyNotPromotedList,
-        contextType: contextType);
+    MethodInvocationInferrer(
+            resolver: _resolver,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: rawType,
+            whyNotPromotedList: whyNotPromotedList,
+            contextType: contextType)
+        .resolveInvocation();
   }
 
   void _resolveReceiverFunctionBounded(
@@ -548,13 +549,14 @@
       node.staticInvokeType = _dynamicType;
       node.staticType = NeverTypeImpl.instance;
 
-      const MethodInvocationInferrer().resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          argumentList: node.argumentList,
-          rawType: null,
-          contextType: contextType,
-          whyNotPromotedList: whyNotPromotedList);
+      MethodInvocationInferrer(
+              resolver: _resolver,
+              node: node,
+              argumentList: node.argumentList,
+              rawType: null,
+              contextType: contextType,
+              whyNotPromotedList: whyNotPromotedList)
+          .resolveInvocation();
 
       _resolver.errorReporter.reportErrorForNode(
         HintCode.RECEIVER_OF_TYPE_NEVER,
@@ -568,13 +570,14 @@
       node.staticInvokeType = _dynamicType;
       node.staticType = _dynamicType;
 
-      const MethodInvocationInferrer().resolveInvocation(
-          resolver: _resolver,
-          node: node,
-          argumentList: node.argumentList,
-          rawType: null,
-          contextType: contextType,
-          whyNotPromotedList: whyNotPromotedList);
+      MethodInvocationInferrer(
+              resolver: _resolver,
+              node: node,
+              argumentList: node.argumentList,
+              rawType: null,
+              contextType: contextType,
+              whyNotPromotedList: whyNotPromotedList)
+          .resolveInvocation();
       return;
     }
   }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 3c61b28..78180a7 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1543,22 +1543,23 @@
 
     var receiverContextType =
         ExtensionMemberResolver(this).computeOverrideReceiverContextType(node);
-    const InvocationInferrer<ExtensionOverrideImpl>().resolveInvocation(
-        resolver: this,
-        node: node,
-        argumentList: node.argumentList,
-        rawType: receiverContextType == null
-            ? null
-            : FunctionTypeImpl(
-                typeFormals: const [],
-                parameters: [
-                    ParameterElementImpl.synthetic(
-                        null, receiverContextType, ParameterKind.REQUIRED)
-                  ],
-                returnType: DynamicTypeImpl.instance,
-                nullabilitySuffix: NullabilitySuffix.none),
-        contextType: null,
-        whyNotPromotedList: whyNotPromotedList);
+    InvocationInferrer<ExtensionOverrideImpl>(
+            resolver: this,
+            node: node,
+            argumentList: node.argumentList,
+            rawType: receiverContextType == null
+                ? null
+                : FunctionTypeImpl(
+                    typeFormals: const [],
+                    parameters: [
+                        ParameterElementImpl.synthetic(
+                            null, receiverContextType, ParameterKind.REQUIRED)
+                      ],
+                    returnType: DynamicTypeImpl.instance,
+                    nullabilitySuffix: NullabilitySuffix.none),
+            contextType: null,
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
 
     extensionResolver.resolveOverride(node, whyNotPromotedList);
   }
@@ -2167,14 +2168,14 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     elementResolver.visitRedirectingConstructorInvocation(
         node as RedirectingConstructorInvocationImpl);
-    const InvocationInferrer<RedirectingConstructorInvocationImpl>()
-        .resolveInvocation(
+    InvocationInferrer<RedirectingConstructorInvocationImpl>(
             resolver: this,
             node: node,
             argumentList: node.argumentList,
             rawType: node.staticElement?.type,
             contextType: null,
-            whyNotPromotedList: whyNotPromotedList);
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
@@ -2277,14 +2278,14 @@
     var whyNotPromotedList = <Map<DartType, NonPromotionReason> Function()>[];
     elementResolver.visitSuperConstructorInvocation(
         node as SuperConstructorInvocationImpl);
-    const InvocationInferrer<SuperConstructorInvocationImpl>()
-        .resolveInvocation(
+    InvocationInferrer<SuperConstructorInvocationImpl>(
             resolver: this,
             node: node,
             argumentList: node.argumentList,
             rawType: node.staticElement?.type,
             contextType: null,
-            whyNotPromotedList: whyNotPromotedList);
+            whyNotPromotedList: whyNotPromotedList)
+        .resolveInvocation();
     checkForArgumentTypesNotAssignableInList(
         node.argumentList, whyNotPromotedList);
   }
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index a3f6f3d..96e8861 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -402,6 +402,19 @@
 ''');
   }
 
+  test_issue_48688() async {
+    // During parsing we recover as `<synthetic>.bar.baz()`.
+    // So, we have a synthetic empty identifier.
+    // There was a bug - we considered it a reference to the unnamed extension.
+    await _assertCanBeAnalyzed(r'''
+void f() {
+  final foo.bar.baz();
+}
+
+extension on int {}
+''');
+  }
+
   test_keywordInConstructorInitializer_assert() async {
     await _assertCanBeAnalyzed('''
 class C {
diff --git a/pkg/analyzer/test/src/dart/resolution/library_element_test.dart b/pkg/analyzer/test/src/dart/resolution/library_element_test.dart
index 61f0885..27de8e9 100644
--- a/pkg/analyzer/test/src/dart/resolution/library_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/library_element_test.dart
@@ -191,6 +191,18 @@
     );
   }
 
+  test_lookup_extension_unnamed() async {
+    await assertNoErrorsInCode(r'''
+extension on int {}
+''');
+
+    var scope = result.libraryElement.scope;
+
+    assertElementNull(
+      scope.lookup('').getter,
+    );
+  }
+
   test_lookup_implicitCoreImport() async {
     await assertNoErrorsInCode('');
 
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index 32445d5..eb3d905 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -187,7 +187,7 @@
           analyzer.ErrorSeverity severity) =>
       plugin.AnalysisErrorSeverity(severity.name);
 
-  ///Convert the error [type] from the 'analyzer' package to an analysis error
+  /// Convert the error [type] from the 'analyzer' package to an analysis error
   /// type defined by the plugin API.
   plugin.AnalysisErrorType convertErrorType(analyzer.ErrorType type) =>
       plugin.AnalysisErrorType(type.name);
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 54d8b99..ccae7f7 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -27,7 +27,7 @@
 import 'diagnostics/messages.dart' show Message;
 import 'dump_info.dart' show DumpInfoTask;
 import 'elements/entities.dart';
-import 'enqueue.dart' show Enqueuer, ResolutionEnqueuer;
+import 'enqueue.dart' show Enqueuer;
 import 'environment.dart';
 import 'inferrer/abstract_value_domain.dart' show AbstractValueStrategy;
 import 'inferrer/trivial.dart' show TrivialAbstractValueStrategy;
@@ -50,6 +50,7 @@
 import 'options.dart' show CompilerOptions;
 import 'phase/load_kernel.dart' as load_kernel;
 import 'phase/modular_analysis.dart' as modular_analysis;
+import 'resolution/enqueuer.dart';
 import 'serialization/task.dart';
 import 'serialization/serialization.dart';
 import 'serialization/strategies.dart';
@@ -78,8 +79,8 @@
 
   // These internal flags are used to stop compilation after a specific phase.
   // Used only for debugging and testing purposes only.
-  bool stopAfterClosedWorld = false;
-  bool stopAfterTypeInference = false;
+  bool stopAfterClosedWorldForTesting = false;
+  bool stopAfterGlobalTypeInferenceForTesting = false;
 
   /// Output provider from user of Compiler API.
   api.CompilerOutput _outputProvider;
@@ -240,16 +241,6 @@
         return success;
       });
 
-  bool get onlyPerformGlobalTypeInference {
-    return options.readClosedWorldUri != null &&
-        options.readDataUri == null &&
-        options.readCodegenUri == null;
-  }
-
-  bool get onlyPerformCodegen {
-    return options.readClosedWorldUri != null && options.readDataUri != null;
-  }
-
   /// Dumps a list of unused [ir.Library]'s in the [KernelResult]. This *must*
   /// be called before [setMainAndTrimComponent], because that method will
   /// discard the unused [ir.Library]s.
@@ -315,90 +306,8 @@
       await runLoadKernel();
     } else if (options.modularMode) {
       await runModularAnalysis();
-    } else if (onlyPerformGlobalTypeInference) {
-      ir.Component component =
-          await serializationTask.deserializeComponentAndUpdateOptions();
-      var closedWorldAndIndices =
-          await serializationTask.deserializeClosedWorld(
-              environment, abstractValueStrategy, component);
-      if (retainDataForTesting) {
-        closedWorldIndicesForTesting = closedWorldAndIndices.indices;
-      }
-      GlobalTypeInferenceResults globalTypeInferenceResults =
-          performGlobalTypeInference(closedWorldAndIndices.closedWorld);
-      var indices = closedWorldAndIndices.indices;
-      if (options.writeDataUri != null) {
-        serializationTask.serializeGlobalTypeInference(
-            globalTypeInferenceResults, indices);
-        return;
-      }
-      await generateJavaScriptCode(globalTypeInferenceResults,
-          indices: indices);
-    } else if (onlyPerformCodegen) {
-      GlobalTypeInferenceResults globalTypeInferenceResults;
-      ir.Component component =
-          await serializationTask.deserializeComponentAndUpdateOptions();
-      var closedWorldAndIndices =
-          await serializationTask.deserializeClosedWorld(
-              environment, abstractValueStrategy, component);
-      globalTypeInferenceResults =
-          await serializationTask.deserializeGlobalTypeInferenceResults(
-              environment,
-              abstractValueStrategy,
-              component,
-              closedWorldAndIndices);
-      await generateJavaScriptCode(globalTypeInferenceResults,
-          indices: closedWorldAndIndices.indices);
     } else {
-      load_kernel.Output output = await runLoadKernel();
-      if (output == null || compilationFailed) return;
-
-      ir.Component component = output.component;
-      List<Uri> libraries = output.libraries;
-      frontendStrategy.registerLoadedLibraries(component, libraries);
-      List<ModuleData> data;
-      if (options.hasModularAnalysisInputs) {
-        data = await serializationTask.deserializeModuleData(component);
-      }
-      frontendStrategy.registerModuleData(data);
-
-      // After we've deserialized modular data, we trim the component of any
-      // unnecessary dependencies.
-      // Note: It is critical we wait to trim the dill until after we've
-      // deserialized modular data because some of this data may reference
-      // 'trimmed' elements.
-      dumpUnusedLibrariesAndTrimComponent(component, libraries);
-      await compileFromKernel(output.rootLibraryUri, libraries);
-    }
-  }
-
-  void generateJavaScriptCode(
-      GlobalTypeInferenceResults globalTypeInferenceResults,
-      {DataSourceIndices indices}) async {
-    JClosedWorld closedWorld = globalTypeInferenceResults.closedWorld;
-    backendStrategy.registerJClosedWorld(closedWorld);
-    phase = PHASE_COMPILING;
-    CodegenInputs codegenInputs =
-        backendStrategy.onCodegenStart(globalTypeInferenceResults);
-
-    if (options.readCodegenUri != null) {
-      CodegenResults codegenResults =
-          await serializationTask.deserializeCodegen(backendStrategy,
-              globalTypeInferenceResults, codegenInputs, indices);
-      reporter.log('Compiling methods');
-      runCodegenEnqueuer(codegenResults);
-    } else {
-      reporter.log('Compiling methods');
-      CodegenResults codegenResults = OnDemandCodegenResults(
-          globalTypeInferenceResults,
-          codegenInputs,
-          backendStrategy.functionCompiler);
-      if (options.writeCodegenUri != null) {
-        serializationTask.serializeCodegen(
-            backendStrategy, codegenResults, indices);
-      } else {
-        runCodegenEnqueuer(codegenResults);
-      }
+      await runSequentialPhases();
     }
   }
 
@@ -547,6 +456,7 @@
     }
     _codegenWorldBuilder = codegenEnqueuer.worldBuilder;
 
+    reporter.log('Compiling methods');
     FunctionEntity mainFunction = closedWorld.elementEnvironment.mainFunction;
     processQueue(closedWorld.elementEnvironment, codegenEnqueuer, mainFunction,
         onProgress: showCodegenProgress);
@@ -597,32 +507,140 @@
         globalTypeInferenceResultsData);
   }
 
-  void compileFromKernel(Uri rootLibraryUri, Iterable<Uri> libraries) {
-    _userCodeLocations.add(CodeLocation(rootLibraryUri));
-    selfTask.measureSubtask("compileFromKernel", () {
-      JsClosedWorld closedWorld = selfTask.measureSubtask("computeClosedWorld",
-          () => computeClosedWorld(rootLibraryUri, libraries));
-      if (closedWorld == null) return;
+  Future<load_kernel.Output> loadComponent() async {
+    load_kernel.Output output = await runLoadKernel();
+    if (output == null || compilationFailed) return null;
 
-      if (retainDataForTesting) {
-        backendClosedWorldForTesting = closedWorld;
-      }
+    ir.Component component = output.component;
+    List<Uri> libraries = output.libraries;
+    frontendStrategy.registerLoadedLibraries(component, libraries);
+    List<ModuleData> data;
+    if (options.hasModularAnalysisInputs) {
+      data = await serializationTask.deserializeModuleData(component);
+    }
+    frontendStrategy.registerModuleData(data);
 
-      if (options.writeClosedWorldUri != null) {
-        serializationTask.serializeComponent(
-            closedWorld.elementMap.programEnv.mainComponent);
-        serializationTask.serializeClosedWorld(closedWorld);
-        return;
+    // After we've deserialized modular data, we trim the component of any
+    // unnecessary dependencies.
+    // Note: It is critical we wait to trim the dill until after we've
+    // deserialized modular data because some of this data may reference
+    // 'trimmed' elements.
+    dumpUnusedLibrariesAndTrimComponent(component, libraries);
+    return output;
+  }
+
+  Future<ClosedWorldAndIndices> produceClosedWorld() async {
+    ClosedWorldAndIndices closedWorldAndIndices;
+    if (options.readClosedWorldUri == null) {
+      load_kernel.Output loadKernelOutput = await loadComponent();
+      if (loadKernelOutput != null) {
+        Uri rootLibraryUri = loadKernelOutput.rootLibraryUri;
+        Iterable<Uri> libraries = loadKernelOutput.libraries;
+        _userCodeLocations.add(CodeLocation(rootLibraryUri));
+        JsClosedWorld closedWorld =
+            computeClosedWorld(rootLibraryUri, libraries);
+        closedWorldAndIndices = ClosedWorldAndIndices(closedWorld, null);
+        if (options.writeClosedWorldUri != null) {
+          serializationTask.serializeComponent(
+              closedWorld.elementMap.programEnv.mainComponent);
+          serializationTask.serializeClosedWorld(closedWorld);
+        }
       }
-      if (stopAfterClosedWorld || options.stopAfterProgramSplit) return;
-      GlobalTypeInferenceResults globalInferenceResults =
-          performGlobalTypeInference(closedWorld);
-      if (options.testMode) {
-        globalInferenceResults =
-            globalTypeInferenceResultsTestMode(globalInferenceResults);
+    } else {
+      ir.Component component =
+          await serializationTask.deserializeComponentAndUpdateOptions();
+      closedWorldAndIndices = await serializationTask.deserializeClosedWorld(
+          environment, abstractValueStrategy, component);
+    }
+    if (closedWorldAndIndices != null && retainDataForTesting) {
+      backendClosedWorldForTesting = closedWorldAndIndices.closedWorld;
+      closedWorldIndicesForTesting = closedWorldAndIndices.indices;
+    }
+    return closedWorldAndIndices;
+  }
+
+  bool shouldStopAfterClosedWorld(
+          ClosedWorldAndIndices closedWorldAndIndices) =>
+      closedWorldAndIndices == null ||
+      closedWorldAndIndices.closedWorld == null ||
+      stopAfterClosedWorldForTesting ||
+      options.stopAfterProgramSplit ||
+      options.writeClosedWorldUri != null;
+
+  Future<GlobalTypeInferenceResults> produceGlobalTypeInferenceResults(
+      ClosedWorldAndIndices closedWorldAndIndices) async {
+    JsClosedWorld closedWorld = closedWorldAndIndices.closedWorld;
+    GlobalTypeInferenceResults globalTypeInferenceResults;
+    if (options.readDataUri == null) {
+      globalTypeInferenceResults = performGlobalTypeInference(closedWorld);
+      if (options.writeDataUri != null) {
+        serializationTask.serializeGlobalTypeInference(
+            globalTypeInferenceResults, closedWorldAndIndices.indices);
+      } else if (options.testMode) {
+        globalTypeInferenceResults =
+            globalTypeInferenceResultsTestMode(globalTypeInferenceResults);
       }
-      if (stopAfterTypeInference) return;
-      generateJavaScriptCode(globalInferenceResults);
+    } else {
+      globalTypeInferenceResults =
+          await serializationTask.deserializeGlobalTypeInferenceResults(
+              environment,
+              abstractValueStrategy,
+              closedWorld.elementMap.programEnv.mainComponent,
+              closedWorldAndIndices);
+    }
+    return globalTypeInferenceResults;
+  }
+
+  bool get shouldStopAfterGlobalTypeInference =>
+      options.writeDataUri != null || stopAfterGlobalTypeInferenceForTesting;
+
+  CodegenInputs initializeCodegen(
+      GlobalTypeInferenceResults globalTypeInferenceResults) {
+    backendStrategy
+        .registerJClosedWorld(globalTypeInferenceResults.closedWorld);
+    phase = PHASE_COMPILING;
+    return backendStrategy.onCodegenStart(globalTypeInferenceResults);
+  }
+
+  Future<CodegenResults> produceCodegenResults(
+      GlobalTypeInferenceResults globalTypeInferenceResults,
+      DataSourceIndices indices) async {
+    CodegenInputs codegenInputs = initializeCodegen(globalTypeInferenceResults);
+    CodegenResults codegenResults;
+    if (options.readCodegenUri == null) {
+      codegenResults = OnDemandCodegenResults(globalTypeInferenceResults,
+          codegenInputs, backendStrategy.functionCompiler);
+      if (options.writeCodegenUri != null) {
+        serializationTask.serializeCodegen(
+            backendStrategy, codegenResults, indices);
+      }
+    } else {
+      codegenResults = await serializationTask.deserializeCodegen(
+          backendStrategy, globalTypeInferenceResults, codegenInputs, indices);
+    }
+    return codegenResults;
+  }
+
+  bool get shouldStopAfterCodegen => options.writeCodegenUri != null;
+
+  void runSequentialPhases() async {
+    await selfTask.measureSubtask("compileFromKernel", () async {
+      // Load kernel and compute closed world.
+      ClosedWorldAndIndices closedWorldAndIndices = await produceClosedWorld();
+      if (shouldStopAfterClosedWorld(closedWorldAndIndices)) return;
+
+      // Run global analysis.
+      GlobalTypeInferenceResults globalTypeInferenceResults =
+          await produceGlobalTypeInferenceResults(closedWorldAndIndices);
+      if (shouldStopAfterGlobalTypeInference) return;
+
+      // Run codegen.
+      CodegenResults codegenResults = await produceCodegenResults(
+          globalTypeInferenceResults, closedWorldAndIndices.indices);
+      if (shouldStopAfterCodegen) return;
+
+      // Link.
+      runCodegenEnqueuer(codegenResults);
     });
   }
 
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index c95ad1b..075a591 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -4,29 +4,14 @@
 
 library dart2js.enqueue;
 
-import 'dart:collection' show Queue;
-
-import 'common.dart';
 import 'common/elements.dart' show ElementEnvironment;
 import 'common/tasks.dart' show CompilerTask;
 import 'common/work.dart' show WorkItem;
 import 'constants/values.dart';
 import 'elements/entities.dart';
 import 'elements/types.dart';
-import 'js_backend/annotations.dart';
-import 'universe/member_usage.dart';
-import 'universe/resolution_world_builder.dart';
-import 'universe/use.dart'
-    show
-        ConstantUse,
-        DynamicUse,
-        StaticUse,
-        StaticUseKind,
-        TypeUse,
-        TypeUseKind;
+import 'universe/use.dart' show ConstantUse, DynamicUse, StaticUse, TypeUse;
 import 'universe/world_impact.dart' show WorldImpact, WorldImpactVisitor;
-import 'util/enumset.dart';
-import 'util/util.dart' show Setlet;
 
 abstract class EnqueuerListener {
   /// Called to instruct to the backend that [type] has been instantiated.
@@ -152,292 +137,6 @@
   }
 }
 
-/// [Enqueuer] which is specific to resolution.
-class ResolutionEnqueuer extends Enqueuer {
-  @override
-  final CompilerTask task;
-  final String name;
-  @override
-  final EnqueuerListener listener;
-
-  final Set<ClassEntity> _recentClasses = Setlet<ClassEntity>();
-  bool _recentConstants = false;
-  final ResolutionWorldBuilder worldBuilder;
-  WorkItemBuilder _workItemBuilder;
-  final DiagnosticReporter _reporter;
-  final AnnotationsData _annotationsData;
-
-  @override
-  bool queueIsClosed = false;
-
-  @override
-  WorldImpactVisitor impactVisitor;
-
-  final Queue<WorkItem> _queue = Queue<WorkItem>();
-
-  // If not `null` this is called when the queue has been emptied. It allows for
-  // applying additional impacts before re-emptying the queue.
-  void Function() onEmptyForTesting;
-
-  ResolutionEnqueuer(this.task, this._reporter, this.listener,
-      this.worldBuilder, this._workItemBuilder, this._annotationsData,
-      [this.name = 'resolution enqueuer']) {
-    impactVisitor = EnqueuerImpactVisitor(this);
-  }
-
-  @override
-  Iterable<ClassEntity> get directlyInstantiatedClasses =>
-      worldBuilder.directlyInstantiatedClasses;
-
-  @override
-  bool get queueIsEmpty => _queue.isEmpty;
-
-  @override
-  void checkQueueIsEmpty() {
-    if (_queue.isNotEmpty) {
-      failedAt(_queue.first.element, "$name queue is not empty.");
-    }
-  }
-
-  void _registerInstantiatedType(InterfaceType type,
-      {ConstructorEntity constructor,
-      bool nativeUsage = false,
-      bool globalDependency = false}) {
-    task.measureSubtask('resolution.typeUse', () {
-      worldBuilder.registerTypeInstantiation(type, _applyClassUse,
-          constructor: constructor);
-      listener.registerInstantiatedType(type,
-          isGlobal: globalDependency, nativeUsage: nativeUsage);
-    });
-  }
-
-  @override
-  bool checkNoEnqueuedInvokedInstanceMethods(
-      ElementEnvironment elementEnvironment) {
-    if (Enqueuer.skipEnqueuerCheckForTesting) return true;
-    return checkEnqueuerConsistency(elementEnvironment);
-  }
-
-  @override
-  void checkClass(ClassEntity cls) {
-    worldBuilder.processClassMembers(cls,
-        (MemberEntity member, EnumSet<MemberUse> useSet) {
-      if (useSet.isNotEmpty) {
-        _reporter.internalError(member,
-            'Unenqueued use of $member: ${useSet.iterable(MemberUse.values)}');
-      }
-    }, checkEnqueuerConsistency: true);
-  }
-
-  /// Callback for applying the use of a [member].
-  void _applyMemberUse(Entity member, EnumSet<MemberUse> useSet) {
-    if (useSet.contains(MemberUse.NORMAL)) {
-      _addToWorkList(member);
-    }
-    if (useSet.contains(MemberUse.CLOSURIZE_INSTANCE)) {
-      _registerClosurizedMember(member);
-    }
-    if (useSet.contains(MemberUse.CLOSURIZE_STATIC)) {
-      applyImpact(listener.registerGetOfStaticFunction());
-    }
-  }
-
-  /// Callback for applying the use of a [cls].
-  void _applyClassUse(ClassEntity cls, EnumSet<ClassUse> useSet) {
-    if (useSet.contains(ClassUse.INSTANTIATED)) {
-      _recentClasses.add(cls);
-      worldBuilder.processClassMembers(cls, _applyMemberUse);
-      // We only tell the backend once that [cls] was instantiated, so
-      // any additional dependencies must be treated as global
-      // dependencies.
-      applyImpact(listener.registerInstantiatedClass(cls));
-    }
-    if (useSet.contains(ClassUse.IMPLEMENTED)) {
-      applyImpact(listener.registerImplementedClass(cls));
-    }
-  }
-
-  @override
-  void processDynamicUse(DynamicUse dynamicUse) {
-    task.measureSubtask('resolution.dynamicUse', () {
-      worldBuilder.registerDynamicUse(dynamicUse, _applyMemberUse);
-    });
-  }
-
-  @override
-  void processConstantUse(ConstantUse constantUse) {
-    task.measureSubtask('resolution.constantUse', () {
-      if (worldBuilder.registerConstantUse(constantUse)) {
-        applyImpact(listener.registerUsedConstant(constantUse.value));
-        _recentConstants = true;
-      }
-    });
-  }
-
-  @override
-  void processStaticUse(MemberEntity member, StaticUse staticUse) {
-    task.measureSubtask('resolution.staticUse', () {
-      worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
-      // TODO(johnniwinther): Add `ResolutionWorldBuilder.registerConstructorUse`
-      // for these:
-      switch (staticUse.kind) {
-        case StaticUseKind.CONSTRUCTOR_INVOKE:
-        case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
-          _registerInstantiatedType(staticUse.type,
-              constructor: staticUse.element, globalDependency: false);
-          break;
-        default:
-          break;
-      }
-    });
-  }
-
-  @override
-  void processTypeUse(MemberEntity member, TypeUse typeUse) {
-    DartType type = typeUse.type;
-    switch (typeUse.kind) {
-      case TypeUseKind.INSTANTIATION:
-      case TypeUseKind.CONST_INSTANTIATION:
-        _registerInstantiatedType(type, globalDependency: false);
-        break;
-      case TypeUseKind.NATIVE_INSTANTIATION:
-        _registerInstantiatedType(type,
-            nativeUsage: true, globalDependency: true);
-        break;
-      case TypeUseKind.IS_CHECK:
-      case TypeUseKind.CATCH_TYPE:
-        _registerIsCheck(type);
-        break;
-      case TypeUseKind.AS_CAST:
-        if (_annotationsData.getExplicitCastCheckPolicy(member).isEmitted) {
-          _registerIsCheck(type);
-        }
-        break;
-      case TypeUseKind.IMPLICIT_CAST:
-        if (_annotationsData.getImplicitDowncastCheckPolicy(member).isEmitted) {
-          _registerIsCheck(type);
-        }
-        break;
-      case TypeUseKind.PARAMETER_CHECK:
-      case TypeUseKind.TYPE_VARIABLE_BOUND_CHECK:
-        if (_annotationsData.getParameterCheckPolicy(member).isEmitted) {
-          _registerIsCheck(type);
-        }
-        break;
-      case TypeUseKind.TYPE_LITERAL:
-        if (type is TypeVariableType) {
-          worldBuilder.registerTypeVariableTypeLiteral(type);
-        }
-        break;
-      case TypeUseKind.RTI_VALUE:
-      case TypeUseKind.TYPE_ARGUMENT:
-      case TypeUseKind.CONSTRUCTOR_REFERENCE:
-        failedAt(CURRENT_ELEMENT_SPANNABLE, "Unexpected type use: $typeUse.");
-        break;
-      case TypeUseKind.NAMED_TYPE_VARIABLE_NEW_RTI:
-        assert(type is TypeVariableType);
-        _registerNamedTypeVariableNewRti(type);
-        break;
-    }
-  }
-
-  void _registerIsCheck(DartType type) {
-    worldBuilder.registerIsCheck(type);
-  }
-
-  void _registerNamedTypeVariableNewRti(TypeVariableType type) {
-    worldBuilder.registerNamedTypeVariableNewRti(type);
-  }
-
-  void _registerClosurizedMember(MemberEntity element) {
-    assert(element.isInstanceMember);
-    applyImpact(listener.registerClosurizedMember(element));
-    worldBuilder.registerClosurizedMember(element);
-  }
-
-  void _forEach(void f(WorkItem work)) {
-    do {
-      while (_queue.isNotEmpty) {
-        // TODO(johnniwinther): Find an optimal process order.
-        WorkItem work = _queue.removeLast();
-        if (!worldBuilder.isMemberProcessed(work.element)) {
-          f(work);
-          worldBuilder.registerProcessedMember(work.element);
-        }
-      }
-      List<ClassEntity> recents = _recentClasses.toList(growable: false);
-      _recentClasses.clear();
-      _recentConstants = false;
-      if (!_onQueueEmpty(recents)) {
-        _recentClasses.addAll(recents);
-      }
-    } while (
-        _queue.isNotEmpty || _recentClasses.isNotEmpty || _recentConstants);
-  }
-
-  @override
-  void forEach(void f(WorkItem work)) {
-    _forEach(f);
-    if (onEmptyForTesting != null) {
-      onEmptyForTesting();
-      _forEach(f);
-    }
-  }
-
-  @override
-  void logSummary(void log(String message)) {
-    log('Resolved ${processedEntities.length} elements.');
-    listener.logSummary(log);
-  }
-
-  @override
-  String toString() => 'Enqueuer($name)';
-
-  @override
-  Iterable<MemberEntity> get processedEntities => worldBuilder.processedMembers;
-
-  @override
-  void close() {
-    super.close();
-    // Null out _workItemBuilder to release memory (it internally holds large
-    // data-structures unnecessary after resolution.)
-    _workItemBuilder = null;
-  }
-
-  /// Registers [entity] as processed by the resolution enqueuer. Used only for
-  /// testing.
-  void registerProcessedElementInternal(MemberEntity entity) {
-    worldBuilder.registerProcessedMember(entity);
-  }
-
-  /// Create a [WorkItem] for [entity] and add it to the work list if it has not
-  /// already been processed.
-  void _addToWorkList(MemberEntity entity) {
-    if (worldBuilder.isMemberProcessed(entity)) return;
-    WorkItem workItem = _workItemBuilder.createWorkItem(entity);
-    if (workItem == null) return;
-
-    if (queueIsClosed) {
-      failedAt(
-          entity, "Resolution work list is closed. Trying to add $entity.");
-    }
-
-    applyImpact(listener.registerUsedElement(entity));
-    worldBuilder.registerUsedElement(entity);
-    _queue.add(workItem);
-  }
-
-  /// [_onQueueEmpty] is called whenever the queue is drained. [recentClasses]
-  /// contains the set of all classes seen for the first time since
-  /// [_onQueueEmpty] was called last. A return value of [true] indicates that
-  /// the [recentClasses] have been processed and may be cleared. If [false] is
-  /// returned, [_onQueueEmpty] will be called once the queue is empty again (or
-  /// still empty) and [recentClasses] will be a superset of the current value.
-  bool _onQueueEmpty(Iterable<ClassEntity> recentClasses) {
-    return listener.onQueueEmpty(this, recentClasses);
-  }
-}
-
 class EnqueuerImpactVisitor implements WorldImpactVisitor {
   final Enqueuer enqueuer;
 
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index c68ffeb..1ea8f86 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -3,18 +3,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:kernel/ast.dart' as ir;
-import 'package:kernel/class_hierarchy.dart' as ir;
 import 'package:kernel/type_environment.dart' as ir;
 
-import '../common.dart';
 import '../serialization/serialization.dart';
 import 'constants.dart';
 import 'impact_data.dart';
 import 'runtime_type_analysis.dart';
-import 'scope.dart';
 import 'static_type.dart';
 import 'static_type_cache.dart';
-import 'util.dart';
 
 /// Interface for collecting world impact data.
 ///
@@ -193,501 +189,6 @@
   void registerConstConstructorInvocationNode(ir.ConstructorInvocation node);
 }
 
-abstract class ImpactBuilderBase extends StaticTypeVisitor
-    implements ImpactRegistry {
-  @override
-  final VariableScopeModel variableScopeModel;
-
-  @override
-  final ir.StaticTypeContext staticTypeContext;
-
-  ImpactBuilderBase(this.staticTypeContext, StaticTypeCacheImpl staticTypeCache,
-      ir.ClassHierarchy classHierarchy, this.variableScopeModel)
-      : super(
-            staticTypeContext.typeEnvironment, classHierarchy, staticTypeCache);
-
-  @override
-  void handleIntLiteral(ir.IntLiteral node) {
-    registerIntLiteral(node.value);
-  }
-
-  @override
-  void handleDoubleLiteral(ir.DoubleLiteral node) {
-    registerDoubleLiteral(node.value);
-  }
-
-  @override
-  void handleBoolLiteral(ir.BoolLiteral node) {
-    registerBoolLiteral(node.value);
-  }
-
-  @override
-  void handleStringLiteral(ir.StringLiteral node) {
-    registerStringLiteral(node.value);
-  }
-
-  @override
-  void handleSymbolLiteral(ir.SymbolLiteral node) {
-    registerSymbolLiteral(node.value);
-  }
-
-  @override
-  void handleNullLiteral(ir.NullLiteral node) {
-    registerNullLiteral();
-  }
-
-  @override
-  void handleListLiteral(ir.ListLiteral node) {
-    registerListLiteral(node.typeArgument,
-        isConst: node.isConst, isEmpty: node.expressions.isEmpty);
-  }
-
-  @override
-  void handleSetLiteral(ir.SetLiteral node) {
-    registerSetLiteral(node.typeArgument,
-        isConst: node.isConst, isEmpty: node.expressions.isEmpty);
-  }
-
-  @override
-  void handleMapLiteral(ir.MapLiteral node) {
-    registerMapLiteral(node.keyType, node.valueType,
-        isConst: node.isConst, isEmpty: node.entries.isEmpty);
-  }
-
-  @override
-  void handleStaticGet(
-      ir.Expression node, ir.Member target, ir.DartType resultType) {
-    assert(!(target is ir.Procedure && target.kind == ir.ProcedureKind.Method),
-        "Static tear off registered as static get: $node");
-    registerStaticGet(target, getDeferredImport(node));
-  }
-
-  @override
-  void handleStaticTearOff(
-      ir.Expression node, ir.Member target, ir.DartType resultType) {
-    assert(target is ir.Procedure && target.kind == ir.ProcedureKind.Method,
-        "Static get registered as static tear off: $node");
-    registerStaticTearOff(target, getDeferredImport(node));
-  }
-
-  @override
-  void handleStaticSet(ir.StaticSet node, ir.DartType valueType) {
-    registerStaticSet(node.target, getDeferredImport(node));
-  }
-
-  @override
-  void handleAssertStatement(ir.AssertStatement node) {
-    registerAssert(withMessage: node.message != null);
-  }
-
-  @override
-  void handleInstantiation(ir.Instantiation node,
-      ir.FunctionType expressionType, ir.DartType resultType) {
-    registerGenericInstantiation(expressionType, node.typeArguments);
-  }
-
-  void handleAsyncMarker(ir.FunctionNode function) {
-    ir.AsyncMarker asyncMarker = function.asyncMarker;
-    ir.DartType returnType = function.returnType;
-
-    switch (asyncMarker) {
-      case ir.AsyncMarker.Sync:
-        break;
-      case ir.AsyncMarker.SyncStar:
-        ir.DartType elementType = const ir.DynamicType();
-        if (returnType is ir.InterfaceType) {
-          if (returnType.classNode == typeEnvironment.coreTypes.iterableClass) {
-            elementType = returnType.typeArguments.first;
-          }
-        }
-        registerSyncStar(elementType);
-        break;
-
-      case ir.AsyncMarker.Async:
-        ir.DartType elementType = const ir.DynamicType();
-        if (returnType is ir.InterfaceType &&
-            returnType.classNode == typeEnvironment.coreTypes.futureClass) {
-          elementType = returnType.typeArguments.first;
-        } else if (returnType is ir.FutureOrType) {
-          elementType = returnType.typeArgument;
-        }
-        registerAsync(elementType);
-        break;
-
-      case ir.AsyncMarker.AsyncStar:
-        ir.DartType elementType = const ir.DynamicType();
-        if (returnType is ir.InterfaceType) {
-          if (returnType.classNode == typeEnvironment.coreTypes.streamClass) {
-            elementType = returnType.typeArguments.first;
-          }
-        }
-        registerAsyncStar(elementType);
-        break;
-
-      case ir.AsyncMarker.SyncYielding:
-        failedAt(CURRENT_ELEMENT_SPANNABLE,
-            "Unexpected async marker: ${asyncMarker}");
-    }
-  }
-
-  @override
-  void handleStringConcatenation(ir.StringConcatenation node) {
-    registerStringConcatenation();
-  }
-
-  @override
-  Null handleFunctionDeclaration(ir.FunctionDeclaration node) {
-    registerLocalFunction(node);
-    handleAsyncMarker(node.function);
-  }
-
-  @override
-  void handleFunctionExpression(ir.FunctionExpression node) {
-    registerLocalFunction(node);
-    handleAsyncMarker(node.function);
-  }
-
-  @override
-  void handleVariableDeclaration(ir.VariableDeclaration node) {
-    if (node.initializer == null) {
-      registerLocalWithoutInitializer();
-    }
-  }
-
-  @override
-  void handleIsExpression(ir.IsExpression node) {
-    registerIsCheck(node.type);
-  }
-
-  @override
-  void handleAsExpression(ir.AsExpression node, ir.DartType operandType) {
-    if (typeEnvironment.isSubtypeOf(
-        operandType, node.type, ir.SubtypeCheckMode.ignoringNullabilities)) {
-      // Skip unneeded casts.
-      return;
-    }
-    if (node.isTypeError) {
-      registerImplicitCast(node.type);
-    } else {
-      registerAsCast(node.type);
-    }
-  }
-
-  @override
-  void handleThrow(ir.Throw node) {
-    registerThrow();
-  }
-
-  @override
-  void handleForInStatement(ir.ForInStatement node, ir.DartType iterableType,
-      ir.DartType iteratorType) {
-    if (node.isAsync) {
-      registerAsyncForIn(iterableType, iteratorType,
-          computeClassRelationFromType(iteratorType));
-    } else {
-      registerSyncForIn(iterableType, iteratorType,
-          computeClassRelationFromType(iteratorType));
-    }
-  }
-
-  @override
-  void handleCatch(ir.Catch node) {
-    registerCatch();
-    if (node.stackTrace != null) {
-      registerStackTrace();
-    }
-    if (node.guard is! ir.DynamicType) {
-      registerCatchType(node.guard);
-    }
-  }
-
-  @override
-  void handleTypeLiteral(ir.TypeLiteral node) {
-    registerTypeLiteral(node.type, getDeferredImport(node));
-  }
-
-  @override
-  void handleFieldInitializer(ir.FieldInitializer node) {
-    registerFieldInitialization(node.field);
-  }
-
-  @override
-  void handleLoadLibrary(ir.LoadLibrary node) {
-    registerLoadLibrary();
-  }
-
-  @override
-  void handleRedirectingInitializer(
-      ir.RedirectingInitializer node, ArgumentTypes argumentTypes) {
-    registerRedirectingInitializer(
-        node.target,
-        node.arguments.positional.length,
-        _getNamedArguments(node.arguments),
-        node.arguments.types);
-  }
-
-  @override
-  void handleParameter(ir.VariableDeclaration parameter) {
-    registerParameterCheck(parameter.type);
-  }
-
-  @override
-  void handleSignature(ir.FunctionNode node) {
-    for (ir.TypeParameter parameter in node.typeParameters) {
-      registerParameterCheck(parameter.bound);
-    }
-  }
-
-  @override
-  void handleConstructor(ir.Constructor node) {
-    registerConstructorNode(node);
-  }
-
-  @override
-  void handleField(ir.Field field) {
-    registerParameterCheck(field.type);
-    if (field.initializer != null) {
-      if (!field.isInstanceMember &&
-          !field.isConst &&
-          field.initializer is! ir.NullLiteral) {
-        registerLazyField();
-      }
-    } else {
-      registerNullLiteral();
-    }
-    registerFieldNode(field);
-  }
-
-  @override
-  void handleProcedure(ir.Procedure procedure) {
-    handleAsyncMarker(procedure.function);
-    registerProcedureNode(procedure);
-  }
-
-  @override
-  void handleConstructorInvocation(ir.ConstructorInvocation node,
-      ArgumentTypes argumentTypes, ir.DartType resultType) {
-    registerNew(
-        node.target,
-        node.constructedType,
-        node.arguments.positional.length,
-        _getNamedArguments(node.arguments),
-        node.arguments.types,
-        getDeferredImport(node),
-        isConst: node.isConst);
-    if (node.isConst) {
-      registerConstConstructorInvocationNode(node);
-    }
-  }
-
-  @override
-  void handleStaticInvocation(ir.StaticInvocation node,
-      ArgumentTypes argumentTypes, ir.DartType returnType) {
-    int positionArguments = node.arguments.positional.length;
-    List<String> namedArguments = _getNamedArguments(node.arguments);
-    List<ir.DartType> typeArguments = node.arguments.types;
-    if (node.target.kind == ir.ProcedureKind.Factory) {
-      // TODO(johnniwinther): We should not mark the type as instantiated but
-      // rather follow the type arguments directly.
-      //
-      // Consider this:
-      //
-      //    abstract class A<T> {
-      //      factory A.regular() => new B<T>();
-      //      factory A.redirect() = B<T>;
-      //    }
-      //
-      //    class B<T> implements A<T> {}
-      //
-      //    main() {
-      //      print(new A<int>.regular() is B<int>);
-      //      print(new A<String>.redirect() is B<String>);
-      //    }
-      //
-      // To track that B is actually instantiated as B<int> and B<String> we
-      // need to follow the type arguments passed to A.regular and A.redirect
-      // to B. Currently, we only do this soundly if we register A<int> and
-      // A<String> as instantiated. We should instead register that A.T is
-      // instantiated as int and String.
-      registerNew(
-          node.target,
-          ir.InterfaceType(node.target.enclosingClass,
-              node.target.enclosingLibrary.nonNullable, typeArguments),
-          positionArguments,
-          namedArguments,
-          node.arguments.types,
-          getDeferredImport(node),
-          isConst: node.isConst);
-    } else {
-      registerStaticInvocation(node.target, positionArguments, namedArguments,
-          typeArguments, getDeferredImport(node));
-    }
-    registerStaticInvocationNode(node);
-  }
-
-  @override
-  void handleDynamicInvocation(
-      ir.InvocationExpression node,
-      ir.DartType receiverType,
-      ArgumentTypes argumentTypes,
-      ir.DartType returnType) {
-    int positionArguments = node.arguments.positional.length;
-    List<String> namedArguments = _getNamedArguments(node.arguments);
-    List<ir.DartType> typeArguments = node.arguments.types;
-    ClassRelation relation = computeClassRelationFromType(receiverType);
-    registerDynamicInvocation(receiverType, relation, node.name,
-        positionArguments, namedArguments, typeArguments);
-  }
-
-  @override
-  void handleFunctionInvocation(
-      ir.InvocationExpression node,
-      ir.DartType receiverType,
-      ArgumentTypes argumentTypes,
-      ir.DartType returnType) {
-    int positionArguments = node.arguments.positional.length;
-    List<String> namedArguments = _getNamedArguments(node.arguments);
-    List<ir.DartType> typeArguments = node.arguments.types;
-    registerFunctionInvocation(
-        receiverType, positionArguments, namedArguments, typeArguments);
-  }
-
-  @override
-  void handleInstanceInvocation(
-      ir.InvocationExpression node,
-      ir.DartType receiverType,
-      ir.Member interfaceTarget,
-      ArgumentTypes argumentTypes) {
-    int positionArguments = node.arguments.positional.length;
-    List<String> namedArguments = _getNamedArguments(node.arguments);
-    List<ir.DartType> typeArguments = node.arguments.types;
-    ClassRelation relation = computeClassRelationFromType(receiverType);
-
-    if (interfaceTarget is ir.Field ||
-        interfaceTarget is ir.Procedure &&
-            interfaceTarget.kind == ir.ProcedureKind.Getter) {
-      registerInstanceInvocation(receiverType, relation, interfaceTarget,
-          positionArguments, namedArguments, typeArguments);
-      registerFunctionInvocation(interfaceTarget.getterType, positionArguments,
-          namedArguments, typeArguments);
-    } else {
-      registerInstanceInvocation(receiverType, relation, interfaceTarget,
-          positionArguments, namedArguments, typeArguments);
-    }
-  }
-
-  @override
-  void handleLocalFunctionInvocation(
-      ir.InvocationExpression node,
-      ir.FunctionDeclaration function,
-      ArgumentTypes argumentTypes,
-      ir.DartType returnType) {
-    int positionArguments = node.arguments.positional.length;
-    List<String> namedArguments = _getNamedArguments(node.arguments);
-    List<ir.DartType> typeArguments = node.arguments.types;
-    registerLocalFunctionInvocation(
-        function, positionArguments, namedArguments, typeArguments);
-  }
-
-  @override
-  void handleEqualsCall(ir.Expression left, ir.DartType leftType,
-      ir.Expression right, ir.DartType rightType, ir.Member interfaceTarget) {
-    ClassRelation relation = computeClassRelationFromType(leftType);
-    registerInstanceInvocation(leftType, relation, interfaceTarget, 1,
-        const <String>[], const <ir.DartType>[]);
-  }
-
-  @override
-  void handleEqualsNull(ir.EqualsNull node, ir.DartType expressionType) {
-    registerNullLiteral();
-  }
-
-  @override
-  void handleDynamicGet(ir.Expression node, ir.DartType receiverType,
-      ir.Name name, ir.DartType resultType) {
-    ClassRelation relation = computeClassRelationFromType(receiverType);
-    registerDynamicGet(receiverType, relation, name);
-  }
-
-  @override
-  void handleInstanceGet(ir.Expression node, ir.DartType receiverType,
-      ir.Member interfaceTarget, ir.DartType resultType) {
-    ClassRelation relation = computeClassRelationFromType(receiverType);
-    registerInstanceGet(receiverType, relation, interfaceTarget);
-  }
-
-  @override
-  void handleDynamicSet(ir.Expression node, ir.DartType receiverType,
-      ir.Name name, ir.DartType valueType) {
-    ClassRelation relation = computeClassRelationFromType(receiverType);
-    registerDynamicSet(receiverType, relation, name);
-  }
-
-  @override
-  void handleInstanceSet(ir.Expression node, ir.DartType receiverType,
-      ir.Member interfaceTarget, ir.DartType valueType) {
-    ClassRelation relation = computeClassRelationFromType(receiverType);
-    registerInstanceSet(receiverType, relation, interfaceTarget);
-  }
-
-  @override
-  void handleSuperMethodInvocation(ir.SuperMethodInvocation node,
-      ArgumentTypes argumentTypes, ir.DartType returnType) {
-    registerSuperInvocation(
-        getEffectiveSuperTarget(node.interfaceTarget),
-        node.arguments.positional.length,
-        _getNamedArguments(node.arguments),
-        node.arguments.types);
-  }
-
-  @override
-  void handleSuperPropertyGet(
-      ir.SuperPropertyGet node, ir.DartType resultType) {
-    registerSuperGet(getEffectiveSuperTarget(node.interfaceTarget));
-  }
-
-  @override
-  void handleSuperPropertySet(ir.SuperPropertySet node, ir.DartType valueType) {
-    registerSuperSet(getEffectiveSuperTarget(node.interfaceTarget));
-  }
-
-  @override
-  void handleSuperInitializer(
-      ir.SuperInitializer node, ArgumentTypes argumentTypes) {
-    registerSuperInitializer(
-        node.parent,
-        node.target,
-        node.arguments.positional.length,
-        _getNamedArguments(node.arguments),
-        node.arguments.types);
-  }
-
-  @override
-  Null visitSwitchStatement(ir.SwitchStatement node) {
-    registerSwitchStatementNode(node);
-    return super.visitSwitchStatement(node);
-  }
-
-  // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
-  // invocation encoding is no longer used.
-  @override
-  void handleRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
-      ir.DartType receiverType, ir.DartType argumentType) {
-    registerRuntimeTypeUse(node, kind, receiverType, argumentType);
-  }
-
-  @override
-  void handleConstantExpression(ir.ConstantExpression node) {
-    ir.LibraryDependency import = getDeferredImport(node);
-    ConstantImpactVisitor(this, import, node, staticTypeContext)
-        .visitConstant(node.constant);
-  }
-}
-
-/// Return the named arguments names as a list of strings.
-List<String> _getNamedArguments(ir.Arguments arguments) =>
-    arguments.named.map((n) => n.name).toList();
-
 class ImpactBuilderData {
   static const String tag = 'ImpactBuilderData';
 
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index eb3f407..a17c61d 100644
--- a/pkg/compiler/lib/src/ir/impact_data.dart
+++ b/pkg/compiler/lib/src/ir/impact_data.dart
@@ -14,26 +14,33 @@
 import 'impact.dart';
 import 'runtime_type_analysis.dart';
 import 'static_type.dart';
+import 'util.dart';
 
 /// Visitor that builds an [ImpactData] object for the world impact.
-class ImpactBuilder extends ImpactBuilderBase {
+class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
   final ImpactData _data = ImpactData();
 
   @override
+  final VariableScopeModel variableScopeModel;
+
+  @override
+  final ir.StaticTypeContext staticTypeContext;
+
+  @override
   final bool useAsserts;
 
   @override
   final inferEffectivelyFinalVariableTypes;
 
-  ImpactBuilder(
-      ir.StaticTypeContext staticTypeContext,
-      StaticTypeCacheImpl staticTypeCache,
-      ir.ClassHierarchy classHierarchy,
-      VariableScopeModel variableScopeModel,
-      {this.useAsserts = false,
-      this.inferEffectivelyFinalVariableTypes = true})
-      : super(staticTypeContext, staticTypeCache, classHierarchy,
-            variableScopeModel);
+  ImpactBuilder(this.staticTypeContext, StaticTypeCacheImpl staticTypeCache,
+      ir.ClassHierarchy classHierarchy, this.variableScopeModel,
+      {this.useAsserts = false, this.inferEffectivelyFinalVariableTypes = true})
+      : super(
+            staticTypeContext.typeEnvironment, classHierarchy, staticTypeCache);
+
+  /// Return the named arguments names as a list of strings.
+  List<String> _getNamedArguments(ir.Arguments arguments) =>
+      arguments.named.map((n) => n.name).toList();
 
   ImpactBuilderData computeImpact(ir.Member node) {
     if (retainDataForTesting) {
@@ -46,6 +53,483 @@
 
   ImpactData get impactData => _data;
 
+  @override
+  void handleIntLiteral(ir.IntLiteral node) {
+    registerIntLiteral(node.value);
+  }
+
+  @override
+  void handleDoubleLiteral(ir.DoubleLiteral node) {
+    registerDoubleLiteral(node.value);
+  }
+
+  @override
+  void handleBoolLiteral(ir.BoolLiteral node) {
+    registerBoolLiteral(node.value);
+  }
+
+  @override
+  void handleStringLiteral(ir.StringLiteral node) {
+    registerStringLiteral(node.value);
+  }
+
+  @override
+  void handleSymbolLiteral(ir.SymbolLiteral node) {
+    registerSymbolLiteral(node.value);
+  }
+
+  @override
+  void handleNullLiteral(ir.NullLiteral node) {
+    registerNullLiteral();
+  }
+
+  @override
+  void handleListLiteral(ir.ListLiteral node) {
+    registerListLiteral(node.typeArgument,
+        isConst: node.isConst, isEmpty: node.expressions.isEmpty);
+  }
+
+  @override
+  void handleSetLiteral(ir.SetLiteral node) {
+    registerSetLiteral(node.typeArgument,
+        isConst: node.isConst, isEmpty: node.expressions.isEmpty);
+  }
+
+  @override
+  void handleMapLiteral(ir.MapLiteral node) {
+    registerMapLiteral(node.keyType, node.valueType,
+        isConst: node.isConst, isEmpty: node.entries.isEmpty);
+  }
+
+  @override
+  void handleStaticGet(
+      ir.Expression node, ir.Member target, ir.DartType resultType) {
+    assert(!(target is ir.Procedure && target.kind == ir.ProcedureKind.Method),
+        "Static tear off registered as static get: $node");
+    registerStaticGet(target, getDeferredImport(node));
+  }
+
+  @override
+  void handleStaticTearOff(
+      ir.Expression node, ir.Member target, ir.DartType resultType) {
+    assert(target is ir.Procedure && target.kind == ir.ProcedureKind.Method,
+        "Static get registered as static tear off: $node");
+    registerStaticTearOff(target, getDeferredImport(node));
+  }
+
+  @override
+  void handleStaticSet(ir.StaticSet node, ir.DartType valueType) {
+    registerStaticSet(node.target, getDeferredImport(node));
+  }
+
+  @override
+  void handleAssertStatement(ir.AssertStatement node) {
+    registerAssert(withMessage: node.message != null);
+  }
+
+  @override
+  void handleInstantiation(ir.Instantiation node,
+      ir.FunctionType expressionType, ir.DartType resultType) {
+    registerGenericInstantiation(expressionType, node.typeArguments);
+  }
+
+  void handleAsyncMarker(ir.FunctionNode function) {
+    ir.AsyncMarker asyncMarker = function.asyncMarker;
+    ir.DartType returnType = function.returnType;
+
+    switch (asyncMarker) {
+      case ir.AsyncMarker.Sync:
+        break;
+      case ir.AsyncMarker.SyncStar:
+        ir.DartType elementType = const ir.DynamicType();
+        if (returnType is ir.InterfaceType) {
+          if (returnType.classNode == typeEnvironment.coreTypes.iterableClass) {
+            elementType = returnType.typeArguments.first;
+          }
+        }
+        registerSyncStar(elementType);
+        break;
+
+      case ir.AsyncMarker.Async:
+        ir.DartType elementType = const ir.DynamicType();
+        if (returnType is ir.InterfaceType &&
+            returnType.classNode == typeEnvironment.coreTypes.futureClass) {
+          elementType = returnType.typeArguments.first;
+        } else if (returnType is ir.FutureOrType) {
+          elementType = returnType.typeArgument;
+        }
+        registerAsync(elementType);
+        break;
+
+      case ir.AsyncMarker.AsyncStar:
+        ir.DartType elementType = const ir.DynamicType();
+        if (returnType is ir.InterfaceType) {
+          if (returnType.classNode == typeEnvironment.coreTypes.streamClass) {
+            elementType = returnType.typeArguments.first;
+          }
+        }
+        registerAsyncStar(elementType);
+        break;
+
+      case ir.AsyncMarker.SyncYielding:
+        failedAt(CURRENT_ELEMENT_SPANNABLE,
+            "Unexpected async marker: ${asyncMarker}");
+    }
+  }
+
+  @override
+  void handleStringConcatenation(ir.StringConcatenation node) {
+    registerStringConcatenation();
+  }
+
+  @override
+  Null handleFunctionDeclaration(ir.FunctionDeclaration node) {
+    registerLocalFunction(node);
+    handleAsyncMarker(node.function);
+  }
+
+  @override
+  void handleFunctionExpression(ir.FunctionExpression node) {
+    registerLocalFunction(node);
+    handleAsyncMarker(node.function);
+  }
+
+  @override
+  void handleVariableDeclaration(ir.VariableDeclaration node) {
+    if (node.initializer == null) {
+      registerLocalWithoutInitializer();
+    }
+  }
+
+  @override
+  void handleIsExpression(ir.IsExpression node) {
+    registerIsCheck(node.type);
+  }
+
+  @override
+  void handleAsExpression(ir.AsExpression node, ir.DartType operandType) {
+    if (typeEnvironment.isSubtypeOf(
+        operandType, node.type, ir.SubtypeCheckMode.ignoringNullabilities)) {
+      // Skip unneeded casts.
+      return;
+    }
+    if (node.isTypeError) {
+      registerImplicitCast(node.type);
+    } else {
+      registerAsCast(node.type);
+    }
+  }
+
+  @override
+  void handleThrow(ir.Throw node) {
+    registerThrow();
+  }
+
+  @override
+  void handleForInStatement(ir.ForInStatement node, ir.DartType iterableType,
+      ir.DartType iteratorType) {
+    if (node.isAsync) {
+      registerAsyncForIn(iterableType, iteratorType,
+          computeClassRelationFromType(iteratorType));
+    } else {
+      registerSyncForIn(iterableType, iteratorType,
+          computeClassRelationFromType(iteratorType));
+    }
+  }
+
+  @override
+  void handleCatch(ir.Catch node) {
+    registerCatch();
+    if (node.stackTrace != null) {
+      registerStackTrace();
+    }
+    if (node.guard is! ir.DynamicType) {
+      registerCatchType(node.guard);
+    }
+  }
+
+  @override
+  void handleTypeLiteral(ir.TypeLiteral node) {
+    registerTypeLiteral(node.type, getDeferredImport(node));
+  }
+
+  @override
+  void handleFieldInitializer(ir.FieldInitializer node) {
+    registerFieldInitialization(node.field);
+  }
+
+  @override
+  void handleLoadLibrary(ir.LoadLibrary node) {
+    registerLoadLibrary();
+  }
+
+  @override
+  void handleRedirectingInitializer(
+      ir.RedirectingInitializer node, ArgumentTypes argumentTypes) {
+    registerRedirectingInitializer(
+        node.target,
+        node.arguments.positional.length,
+        _getNamedArguments(node.arguments),
+        node.arguments.types);
+  }
+
+  @override
+  void handleParameter(ir.VariableDeclaration parameter) {
+    registerParameterCheck(parameter.type);
+  }
+
+  @override
+  void handleSignature(ir.FunctionNode node) {
+    for (ir.TypeParameter parameter in node.typeParameters) {
+      registerParameterCheck(parameter.bound);
+    }
+  }
+
+  @override
+  void handleConstructor(ir.Constructor node) {
+    registerConstructorNode(node);
+  }
+
+  @override
+  void handleField(ir.Field field) {
+    registerParameterCheck(field.type);
+    if (field.initializer != null) {
+      if (!field.isInstanceMember &&
+          !field.isConst &&
+          field.initializer is! ir.NullLiteral) {
+        registerLazyField();
+      }
+    } else {
+      registerNullLiteral();
+    }
+    registerFieldNode(field);
+  }
+
+  @override
+  void handleProcedure(ir.Procedure procedure) {
+    handleAsyncMarker(procedure.function);
+    registerProcedureNode(procedure);
+  }
+
+  @override
+  void handleConstructorInvocation(ir.ConstructorInvocation node,
+      ArgumentTypes argumentTypes, ir.DartType resultType) {
+    registerNew(
+        node.target,
+        node.constructedType,
+        node.arguments.positional.length,
+        _getNamedArguments(node.arguments),
+        node.arguments.types,
+        getDeferredImport(node),
+        isConst: node.isConst);
+    if (node.isConst) {
+      registerConstConstructorInvocationNode(node);
+    }
+  }
+
+  @override
+  void handleStaticInvocation(ir.StaticInvocation node,
+      ArgumentTypes argumentTypes, ir.DartType returnType) {
+    int positionArguments = node.arguments.positional.length;
+    List<String> namedArguments = _getNamedArguments(node.arguments);
+    List<ir.DartType> typeArguments = node.arguments.types;
+    if (node.target.kind == ir.ProcedureKind.Factory) {
+      // TODO(johnniwinther): We should not mark the type as instantiated but
+      // rather follow the type arguments directly.
+      //
+      // Consider this:
+      //
+      //    abstract class A<T> {
+      //      factory A.regular() => new B<T>();
+      //      factory A.redirect() = B<T>;
+      //    }
+      //
+      //    class B<T> implements A<T> {}
+      //
+      //    main() {
+      //      print(new A<int>.regular() is B<int>);
+      //      print(new A<String>.redirect() is B<String>);
+      //    }
+      //
+      // To track that B is actually instantiated as B<int> and B<String> we
+      // need to follow the type arguments passed to A.regular and A.redirect
+      // to B. Currently, we only do this soundly if we register A<int> and
+      // A<String> as instantiated. We should instead register that A.T is
+      // instantiated as int and String.
+      registerNew(
+          node.target,
+          ir.InterfaceType(node.target.enclosingClass,
+              node.target.enclosingLibrary.nonNullable, typeArguments),
+          positionArguments,
+          namedArguments,
+          node.arguments.types,
+          getDeferredImport(node),
+          isConst: node.isConst);
+    } else {
+      registerStaticInvocation(node.target, positionArguments, namedArguments,
+          typeArguments, getDeferredImport(node));
+    }
+    registerStaticInvocationNode(node);
+  }
+
+  @override
+  void handleDynamicInvocation(
+      ir.InvocationExpression node,
+      ir.DartType receiverType,
+      ArgumentTypes argumentTypes,
+      ir.DartType returnType) {
+    int positionArguments = node.arguments.positional.length;
+    List<String> namedArguments = _getNamedArguments(node.arguments);
+    List<ir.DartType> typeArguments = node.arguments.types;
+    ClassRelation relation = computeClassRelationFromType(receiverType);
+    registerDynamicInvocation(receiverType, relation, node.name,
+        positionArguments, namedArguments, typeArguments);
+  }
+
+  @override
+  void handleFunctionInvocation(
+      ir.InvocationExpression node,
+      ir.DartType receiverType,
+      ArgumentTypes argumentTypes,
+      ir.DartType returnType) {
+    int positionArguments = node.arguments.positional.length;
+    List<String> namedArguments = _getNamedArguments(node.arguments);
+    List<ir.DartType> typeArguments = node.arguments.types;
+    registerFunctionInvocation(
+        receiverType, positionArguments, namedArguments, typeArguments);
+  }
+
+  @override
+  void handleInstanceInvocation(
+      ir.InvocationExpression node,
+      ir.DartType receiverType,
+      ir.Member interfaceTarget,
+      ArgumentTypes argumentTypes) {
+    int positionArguments = node.arguments.positional.length;
+    List<String> namedArguments = _getNamedArguments(node.arguments);
+    List<ir.DartType> typeArguments = node.arguments.types;
+    ClassRelation relation = computeClassRelationFromType(receiverType);
+
+    if (interfaceTarget is ir.Field ||
+        interfaceTarget is ir.Procedure &&
+            interfaceTarget.kind == ir.ProcedureKind.Getter) {
+      registerInstanceInvocation(receiverType, relation, interfaceTarget,
+          positionArguments, namedArguments, typeArguments);
+      registerFunctionInvocation(interfaceTarget.getterType, positionArguments,
+          namedArguments, typeArguments);
+    } else {
+      registerInstanceInvocation(receiverType, relation, interfaceTarget,
+          positionArguments, namedArguments, typeArguments);
+    }
+  }
+
+  @override
+  void handleLocalFunctionInvocation(
+      ir.InvocationExpression node,
+      ir.FunctionDeclaration function,
+      ArgumentTypes argumentTypes,
+      ir.DartType returnType) {
+    int positionArguments = node.arguments.positional.length;
+    List<String> namedArguments = _getNamedArguments(node.arguments);
+    List<ir.DartType> typeArguments = node.arguments.types;
+    registerLocalFunctionInvocation(
+        function, positionArguments, namedArguments, typeArguments);
+  }
+
+  @override
+  void handleEqualsCall(ir.Expression left, ir.DartType leftType,
+      ir.Expression right, ir.DartType rightType, ir.Member interfaceTarget) {
+    ClassRelation relation = computeClassRelationFromType(leftType);
+    registerInstanceInvocation(leftType, relation, interfaceTarget, 1,
+        const <String>[], const <ir.DartType>[]);
+  }
+
+  @override
+  void handleEqualsNull(ir.EqualsNull node, ir.DartType expressionType) {
+    registerNullLiteral();
+  }
+
+  @override
+  void handleDynamicGet(ir.Expression node, ir.DartType receiverType,
+      ir.Name name, ir.DartType resultType) {
+    ClassRelation relation = computeClassRelationFromType(receiverType);
+    registerDynamicGet(receiverType, relation, name);
+  }
+
+  @override
+  void handleInstanceGet(ir.Expression node, ir.DartType receiverType,
+      ir.Member interfaceTarget, ir.DartType resultType) {
+    ClassRelation relation = computeClassRelationFromType(receiverType);
+    registerInstanceGet(receiverType, relation, interfaceTarget);
+  }
+
+  @override
+  void handleDynamicSet(ir.Expression node, ir.DartType receiverType,
+      ir.Name name, ir.DartType valueType) {
+    ClassRelation relation = computeClassRelationFromType(receiverType);
+    registerDynamicSet(receiverType, relation, name);
+  }
+
+  @override
+  void handleInstanceSet(ir.Expression node, ir.DartType receiverType,
+      ir.Member interfaceTarget, ir.DartType valueType) {
+    ClassRelation relation = computeClassRelationFromType(receiverType);
+    registerInstanceSet(receiverType, relation, interfaceTarget);
+  }
+
+  @override
+  void handleSuperMethodInvocation(ir.SuperMethodInvocation node,
+      ArgumentTypes argumentTypes, ir.DartType returnType) {
+    registerSuperInvocation(
+        getEffectiveSuperTarget(node.interfaceTarget),
+        node.arguments.positional.length,
+        _getNamedArguments(node.arguments),
+        node.arguments.types);
+  }
+
+  @override
+  void handleSuperPropertyGet(
+      ir.SuperPropertyGet node, ir.DartType resultType) {
+    registerSuperGet(getEffectiveSuperTarget(node.interfaceTarget));
+  }
+
+  @override
+  void handleSuperPropertySet(ir.SuperPropertySet node, ir.DartType valueType) {
+    registerSuperSet(getEffectiveSuperTarget(node.interfaceTarget));
+  }
+
+  @override
+  void handleSuperInitializer(
+      ir.SuperInitializer node, ArgumentTypes argumentTypes) {
+    registerSuperInitializer(
+        node.parent,
+        node.target,
+        node.arguments.positional.length,
+        _getNamedArguments(node.arguments),
+        node.arguments.types);
+  }
+
+  @override
+  Null visitSwitchStatement(ir.SwitchStatement node) {
+    registerSwitchStatementNode(node);
+    return super.visitSwitchStatement(node);
+  }
+
+  // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
+  // invocation encoding is no longer used.
+  @override
+  void handleRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
+      ir.DartType receiverType, ir.DartType argumentType) {
+    registerRuntimeTypeUse(node, kind, receiverType, argumentType);
+  }
+
+  @override
+  void handleConstantExpression(ir.ConstantExpression node) {
+    ir.LibraryDependency import = getDeferredImport(node);
+    ConstantImpactVisitor(this, import, node, staticTypeContext)
+        .visitConstant(node.constant);
+  }
+
   void _registerFeature(_Feature feature) {
     _data._features ??= EnumSet<_Feature>();
     _data._features.add(feature);
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index cd466b2..d45d1bd 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -38,6 +38,7 @@
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
 import '../native/resolver.dart';
 import '../options.dart';
+import '../resolution/enqueuer.dart';
 import '../universe/class_hierarchy.dart';
 import '../universe/resolution_world_builder.dart';
 import '../universe/world_builder.dart';
diff --git a/pkg/compiler/lib/src/resolution/enqueuer.dart b/pkg/compiler/lib/src/resolution/enqueuer.dart
new file mode 100644
index 0000000..89fcb44
--- /dev/null
+++ b/pkg/compiler/lib/src/resolution/enqueuer.dart
@@ -0,0 +1,313 @@
+// Copyright (c) 2022, 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.
+
+import 'dart:collection' show Queue;
+
+import '../common.dart';
+import '../common/elements.dart' show ElementEnvironment;
+import '../common/tasks.dart' show CompilerTask;
+import '../common/work.dart' show WorkItem;
+import '../enqueue.dart';
+import '../elements/entities.dart';
+import '../elements/types.dart';
+import '../js_backend/annotations.dart';
+import '../universe/member_usage.dart';
+import '../universe/resolution_world_builder.dart';
+import '../universe/use.dart'
+    show
+        ConstantUse,
+        DynamicUse,
+        StaticUse,
+        StaticUseKind,
+        TypeUse,
+        TypeUseKind;
+import '../universe/world_impact.dart' show WorldImpactVisitor;
+import '../util/enumset.dart';
+import '../util/util.dart' show Setlet;
+
+/// [Enqueuer] which is specific to resolution.
+class ResolutionEnqueuer extends Enqueuer {
+  @override
+  final CompilerTask task;
+  final String name;
+  @override
+  final EnqueuerListener listener;
+
+  final Set<ClassEntity> _recentClasses = Setlet<ClassEntity>();
+  bool _recentConstants = false;
+  final ResolutionWorldBuilder worldBuilder;
+  WorkItemBuilder _workItemBuilder;
+  final DiagnosticReporter _reporter;
+  final AnnotationsData _annotationsData;
+
+  @override
+  bool queueIsClosed = false;
+
+  @override
+  WorldImpactVisitor impactVisitor;
+
+  final Queue<WorkItem> _queue = Queue<WorkItem>();
+
+  // If not `null` this is called when the queue has been emptied. It allows for
+  // applying additional impacts before re-emptying the queue.
+  void Function() onEmptyForTesting;
+
+  ResolutionEnqueuer(this.task, this._reporter, this.listener,
+      this.worldBuilder, this._workItemBuilder, this._annotationsData,
+      [this.name = 'resolution enqueuer']) {
+    impactVisitor = EnqueuerImpactVisitor(this);
+  }
+
+  @override
+  Iterable<ClassEntity> get directlyInstantiatedClasses =>
+      worldBuilder.directlyInstantiatedClasses;
+
+  @override
+  bool get queueIsEmpty => _queue.isEmpty;
+
+  @override
+  void checkQueueIsEmpty() {
+    if (_queue.isNotEmpty) {
+      failedAt(_queue.first.element, "$name queue is not empty.");
+    }
+  }
+
+  void _registerInstantiatedType(InterfaceType type,
+      {ConstructorEntity constructor,
+      bool nativeUsage = false,
+      bool globalDependency = false}) {
+    task.measureSubtask('resolution.typeUse', () {
+      worldBuilder.registerTypeInstantiation(type, _applyClassUse,
+          constructor: constructor);
+      listener.registerInstantiatedType(type,
+          isGlobal: globalDependency, nativeUsage: nativeUsage);
+    });
+  }
+
+  @override
+  bool checkNoEnqueuedInvokedInstanceMethods(
+      ElementEnvironment elementEnvironment) {
+    if (Enqueuer.skipEnqueuerCheckForTesting) return true;
+    return checkEnqueuerConsistency(elementEnvironment);
+  }
+
+  @override
+  void checkClass(ClassEntity cls) {
+    worldBuilder.processClassMembers(cls,
+        (MemberEntity member, EnumSet<MemberUse> useSet) {
+      if (useSet.isNotEmpty) {
+        _reporter.internalError(member,
+            'Unenqueued use of $member: ${useSet.iterable(MemberUse.values)}');
+      }
+    }, checkEnqueuerConsistency: true);
+  }
+
+  /// Callback for applying the use of a [member].
+  void _applyMemberUse(Entity member, EnumSet<MemberUse> useSet) {
+    if (useSet.contains(MemberUse.NORMAL)) {
+      _addToWorkList(member);
+    }
+    if (useSet.contains(MemberUse.CLOSURIZE_INSTANCE)) {
+      _registerClosurizedMember(member);
+    }
+    if (useSet.contains(MemberUse.CLOSURIZE_STATIC)) {
+      applyImpact(listener.registerGetOfStaticFunction());
+    }
+  }
+
+  /// Callback for applying the use of a [cls].
+  void _applyClassUse(ClassEntity cls, EnumSet<ClassUse> useSet) {
+    if (useSet.contains(ClassUse.INSTANTIATED)) {
+      _recentClasses.add(cls);
+      worldBuilder.processClassMembers(cls, _applyMemberUse);
+      // We only tell the backend once that [cls] was instantiated, so
+      // any additional dependencies must be treated as global
+      // dependencies.
+      applyImpact(listener.registerInstantiatedClass(cls));
+    }
+    if (useSet.contains(ClassUse.IMPLEMENTED)) {
+      applyImpact(listener.registerImplementedClass(cls));
+    }
+  }
+
+  @override
+  void processDynamicUse(DynamicUse dynamicUse) {
+    task.measureSubtask('resolution.dynamicUse', () {
+      worldBuilder.registerDynamicUse(dynamicUse, _applyMemberUse);
+    });
+  }
+
+  @override
+  void processConstantUse(ConstantUse constantUse) {
+    task.measureSubtask('resolution.constantUse', () {
+      if (worldBuilder.registerConstantUse(constantUse)) {
+        applyImpact(listener.registerUsedConstant(constantUse.value));
+        _recentConstants = true;
+      }
+    });
+  }
+
+  @override
+  void processStaticUse(MemberEntity member, StaticUse staticUse) {
+    task.measureSubtask('resolution.staticUse', () {
+      worldBuilder.registerStaticUse(staticUse, _applyMemberUse);
+      // TODO(johnniwinther): Add `ResolutionWorldBuilder.registerConstructorUse`
+      // for these:
+      switch (staticUse.kind) {
+        case StaticUseKind.CONSTRUCTOR_INVOKE:
+        case StaticUseKind.CONST_CONSTRUCTOR_INVOKE:
+          _registerInstantiatedType(staticUse.type,
+              constructor: staticUse.element, globalDependency: false);
+          break;
+        default:
+          break;
+      }
+    });
+  }
+
+  @override
+  void processTypeUse(MemberEntity member, TypeUse typeUse) {
+    DartType type = typeUse.type;
+    switch (typeUse.kind) {
+      case TypeUseKind.INSTANTIATION:
+      case TypeUseKind.CONST_INSTANTIATION:
+        _registerInstantiatedType(type, globalDependency: false);
+        break;
+      case TypeUseKind.NATIVE_INSTANTIATION:
+        _registerInstantiatedType(type,
+            nativeUsage: true, globalDependency: true);
+        break;
+      case TypeUseKind.IS_CHECK:
+      case TypeUseKind.CATCH_TYPE:
+        _registerIsCheck(type);
+        break;
+      case TypeUseKind.AS_CAST:
+        if (_annotationsData.getExplicitCastCheckPolicy(member).isEmitted) {
+          _registerIsCheck(type);
+        }
+        break;
+      case TypeUseKind.IMPLICIT_CAST:
+        if (_annotationsData.getImplicitDowncastCheckPolicy(member).isEmitted) {
+          _registerIsCheck(type);
+        }
+        break;
+      case TypeUseKind.PARAMETER_CHECK:
+      case TypeUseKind.TYPE_VARIABLE_BOUND_CHECK:
+        if (_annotationsData.getParameterCheckPolicy(member).isEmitted) {
+          _registerIsCheck(type);
+        }
+        break;
+      case TypeUseKind.TYPE_LITERAL:
+        if (type is TypeVariableType) {
+          worldBuilder.registerTypeVariableTypeLiteral(type);
+        }
+        break;
+      case TypeUseKind.RTI_VALUE:
+      case TypeUseKind.TYPE_ARGUMENT:
+      case TypeUseKind.CONSTRUCTOR_REFERENCE:
+        failedAt(CURRENT_ELEMENT_SPANNABLE, "Unexpected type use: $typeUse.");
+        break;
+      case TypeUseKind.NAMED_TYPE_VARIABLE_NEW_RTI:
+        assert(type is TypeVariableType);
+        _registerNamedTypeVariableNewRti(type);
+        break;
+    }
+  }
+
+  void _registerIsCheck(DartType type) {
+    worldBuilder.registerIsCheck(type);
+  }
+
+  void _registerNamedTypeVariableNewRti(TypeVariableType type) {
+    worldBuilder.registerNamedTypeVariableNewRti(type);
+  }
+
+  void _registerClosurizedMember(MemberEntity element) {
+    assert(element.isInstanceMember);
+    applyImpact(listener.registerClosurizedMember(element));
+    worldBuilder.registerClosurizedMember(element);
+  }
+
+  void _forEach(void f(WorkItem work)) {
+    do {
+      while (_queue.isNotEmpty) {
+        // TODO(johnniwinther): Find an optimal process order.
+        WorkItem work = _queue.removeLast();
+        if (!worldBuilder.isMemberProcessed(work.element)) {
+          f(work);
+          worldBuilder.registerProcessedMember(work.element);
+        }
+      }
+      List<ClassEntity> recents = _recentClasses.toList(growable: false);
+      _recentClasses.clear();
+      _recentConstants = false;
+      if (!_onQueueEmpty(recents)) {
+        _recentClasses.addAll(recents);
+      }
+    } while (
+        _queue.isNotEmpty || _recentClasses.isNotEmpty || _recentConstants);
+  }
+
+  @override
+  void forEach(void f(WorkItem work)) {
+    _forEach(f);
+    if (onEmptyForTesting != null) {
+      onEmptyForTesting();
+      _forEach(f);
+    }
+  }
+
+  @override
+  void logSummary(void log(String message)) {
+    log('Resolved ${processedEntities.length} elements.');
+    listener.logSummary(log);
+  }
+
+  @override
+  String toString() => 'Enqueuer($name)';
+
+  @override
+  Iterable<MemberEntity> get processedEntities => worldBuilder.processedMembers;
+
+  @override
+  void close() {
+    super.close();
+    // Null out _workItemBuilder to release memory (it internally holds large
+    // data-structures unnecessary after resolution.)
+    _workItemBuilder = null;
+  }
+
+  /// Registers [entity] as processed by the resolution enqueuer. Used only for
+  /// testing.
+  void registerProcessedElementInternal(MemberEntity entity) {
+    worldBuilder.registerProcessedMember(entity);
+  }
+
+  /// Create a [WorkItem] for [entity] and add it to the work list if it has not
+  /// already been processed.
+  void _addToWorkList(MemberEntity entity) {
+    if (worldBuilder.isMemberProcessed(entity)) return;
+    WorkItem workItem = _workItemBuilder.createWorkItem(entity);
+    if (workItem == null) return;
+
+    if (queueIsClosed) {
+      failedAt(
+          entity, "Resolution work list is closed. Trying to add $entity.");
+    }
+
+    applyImpact(listener.registerUsedElement(entity));
+    worldBuilder.registerUsedElement(entity);
+    _queue.add(workItem);
+  }
+
+  /// [_onQueueEmpty] is called whenever the queue is drained. [recentClasses]
+  /// contains the set of all classes seen for the first time since
+  /// [_onQueueEmpty] was called last. A return value of [true] indicates that
+  /// the [recentClasses] have been processed and may be cleared. If [false] is
+  /// returned, [_onQueueEmpty] will be called once the queue is empty again (or
+  /// still empty) and [recentClasses] will be a superset of the current value.
+  bool _onQueueEmpty(Iterable<ClassEntity> recentClasses) {
+    return listener.onQueueEmpty(this, recentClasses);
+  }
+}
diff --git a/pkg/compiler/test/equivalence/id_equivalence_helper.dart b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
index 037cf61..e8c5eae 100644
--- a/pkg/compiler/test/equivalence/id_equivalence_helper.dart
+++ b/pkg/compiler/test/equivalence/id_equivalence_helper.dart
@@ -149,7 +149,7 @@
       diagnosticHandler: diagnosticCollector,
       options: options,
       beforeRun: (compiler) {
-        compiler.stopAfterTypeInference =
+        compiler.stopAfterGlobalTypeInferenceForTesting =
             options.contains(stopAfterTypeInference);
       },
       packageConfig: packageConfig,
diff --git a/pkg/compiler/test/helpers/type_test_helper.dart b/pkg/compiler/test/helpers/type_test_helper.dart
index 570e368..908efb4 100644
--- a/pkg/compiler/test/helpers/type_test_helper.dart
+++ b/pkg/compiler/test/helpers/type_test_helper.dart
@@ -47,7 +47,7 @@
         options: [Flags.disableTypeInference]..addAll(options),
         diagnosticHandler: collector,
         beforeRun: (compiler) {
-          compiler.stopAfterTypeInference = true;
+          compiler.stopAfterGlobalTypeInferenceForTesting = true;
         });
     Compiler compiler = result.compiler;
     if (expectNoErrors || expectNoWarningsOrErrors) {
diff --git a/pkg/compiler/test/inference/type_combination_test.dart b/pkg/compiler/test/inference/type_combination_test.dart
index 0d371ed..df45a82 100644
--- a/pkg/compiler/test/inference/type_combination_test.dart
+++ b/pkg/compiler/test/inference/type_combination_test.dart
@@ -758,8 +758,9 @@
 }
 
 runTests() async {
-  CompilationResult result = await runCompiler(memorySourceFiles: {
-    'main.dart': r'''
+  CompilationResult result = await runCompiler(
+      memorySourceFiles: {
+        'main.dart': r'''
     import 'dart:collection';
     class AList<E> extends ListBase<E> {
       noSuchMethod(_) {}
@@ -770,7 +771,9 @@
       print('${const []}${const {}}${(){}}${new AList()}');
     }
     '''
-  }, beforeRun: (compiler) => compiler.stopAfterTypeInference = true);
+      },
+      beforeRun: (compiler) =>
+          compiler.stopAfterGlobalTypeInferenceForTesting = true);
   Expect.isTrue(result.isSuccess);
   Compiler compiler = result.compiler;
   JClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
diff --git a/pkg/compiler/test/serialization/serialization_test_helper.dart b/pkg/compiler/test/serialization/serialization_test_helper.dart
index 2df1808..0f1034d 100644
--- a/pkg/compiler/test/serialization/serialization_test_helper.dart
+++ b/pkg/compiler/test/serialization/serialization_test_helper.dart
@@ -8,6 +8,7 @@
 
 import 'package:compiler/compiler.dart';
 import 'package:compiler/src/commandline_options.dart';
+import 'package:compiler/src/common/codegen.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/js_model/js_world.dart';
 import 'package:compiler/src/inferrer/types.dart';
@@ -26,6 +27,14 @@
   '"toJsonDuration":'
 ];
 
+void generateJavaScriptCode(
+    Compiler compiler, GlobalTypeInferenceResults globalTypeInferenceResults) {
+  final codegenInputs = compiler.initializeCodegen(globalTypeInferenceResults);
+  final codegenResults = OnDemandCodegenResults(globalTypeInferenceResults,
+      codegenInputs, compiler.backendStrategy.functionCompiler);
+  compiler.runCodegenEnqueuer(codegenResults);
+}
+
 void finishCompileAndCompare(
     Map<OutputType, Map<String, String>> expectedOutput,
     OutputCollector actualOutputCollector,
@@ -47,7 +56,7 @@
     GlobalTypeInferenceResults newGlobalInferenceResults =
         cloneInferenceResults(
             indices, compiler, globalInferenceResults, strategy);
-    compiler.generateJavaScriptCode(newGlobalInferenceResults);
+    generateJavaScriptCode(compiler, newGlobalInferenceResults);
   }
   var actualOutput = actualOutputCollector.clear();
   Expect.setEquals(
@@ -120,7 +129,7 @@
       outputProvider: collector2,
       beforeRun: (Compiler compiler) {
         compiler.forceSerializationForTesting = true;
-        compiler.stopAfterClosedWorld = true;
+        compiler.stopAfterClosedWorldForTesting = true;
       });
   Expect.isTrue(result2.isSuccess);
 
@@ -165,7 +174,7 @@
       outputProvider: collector3b,
       beforeRun: (Compiler compiler) {
         compiler.forceSerializationForTesting = true;
-        compiler.stopAfterTypeInference = true;
+        compiler.stopAfterGlobalTypeInferenceForTesting = true;
       });
   Expect.isTrue(result3b.isSuccess);
 
diff --git a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
index 74797c3..44e408f 100644
--- a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart
@@ -48,21 +48,20 @@
   }
 
   @override
-  DartType build(LibraryBuilder library, {TypedefType? origin}) {
+  DartType build(LibraryBuilder library) {
     return type;
   }
 
   @override
-  Supertype buildSupertype(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
-    return unhandled('buildSupertype', 'FixedTypeBuilder', charOffset, fileUri);
+  Supertype buildSupertype(LibraryBuilder library) {
+    return unhandled(
+        'buildSupertype', 'FixedTypeBuilder', charOffset ?? -1, fileUri);
   }
 
   @override
-  Supertype buildMixedInType(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
+  Supertype buildMixedInType(LibraryBuilder library) {
     return unhandled(
-        'buildMixedInType', 'FixedTypeBuilder', charOffset, fileUri);
+        'buildMixedInType', 'FixedTypeBuilder', charOffset ?? -1, fileUri);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
index d995931..ea413c2 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart
@@ -11,8 +11,7 @@
         FunctionType,
         NamedType,
         Supertype,
-        TypeParameter,
-        TypedefType;
+        TypeParameter;
 
 import '../fasta_codes.dart' show messageSupertypeIsFunction, noLength;
 
@@ -36,6 +35,8 @@
   @override
   final int charOffset;
 
+  FunctionType? _type;
+
   FunctionTypeBuilder(this.returnType, this.typeVariables, this.formals,
       this.nullabilityBuilder, this.fileUri, this.charOffset);
 
@@ -83,7 +84,11 @@
   }
 
   @override
-  FunctionType build(LibraryBuilder library, {TypedefType? origin}) {
+  FunctionType build(LibraryBuilder library) {
+    return _type ??= _buildInternal(library);
+  }
+
+  FunctionType _buildInternal(LibraryBuilder library) {
     DartType builtReturnType =
         returnType?.build(library) ?? const DynamicType();
     List<DartType> positionalParameters = <DartType>[];
@@ -111,29 +116,26 @@
       for (TypeVariableBuilder t in typeVariables!) {
         typeParameters.add(t.parameter);
         // Build the bound to detect cycles in typedefs.
-        t.bound?.build(library, origin: origin);
+        t.bound?.build(library);
       }
     }
     return new FunctionType(positionalParameters, builtReturnType,
         nullabilityBuilder.build(library),
         namedParameters: namedParameters ?? const <NamedType>[],
         typeParameters: typeParameters ?? const <TypeParameter>[],
-        requiredParameterCount: requiredParameterCount,
-        typedefType: origin);
+        requiredParameterCount: requiredParameterCount);
   }
 
   @override
-  Supertype? buildSupertype(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
+  Supertype? buildSupertype(LibraryBuilder library) {
     library.addProblem(
         messageSupertypeIsFunction, charOffset, noLength, fileUri);
     return null;
   }
 
   @override
-  Supertype? buildMixedInType(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
-    return buildSupertype(library, charOffset, fileUri);
+  Supertype? buildMixedInType(LibraryBuilder library) {
+    return buildSupertype(library);
   }
 
   @override
@@ -143,8 +145,9 @@
       TypeParameterScopeBuilder contextDeclaration) {
     List<TypeVariableBuilder>? clonedTypeVariables;
     if (typeVariables != null) {
-      clonedTypeVariables =
-          contextLibrary.copyTypeVariables(typeVariables!, contextDeclaration);
+      clonedTypeVariables = contextLibrary.copyTypeVariables(
+          typeVariables!, contextDeclaration,
+          kind: TypeVariableKind.function);
     }
     List<FormalParameterBuilder>? clonedFormals;
     if (formals != null) {
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index e66b50a..d885de8 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -107,30 +107,77 @@
   @override
   final int? charOffset;
 
-  @override
-  TypeDeclarationBuilder? declaration;
+  TypeDeclarationBuilder? _declaration;
 
-  final InstanceTypeVariableAccessState instanceTypeVariableAccess;
+  final InstanceTypeVariableAccessState _instanceTypeVariableAccess;
 
-  NamedTypeBuilder(this.name, this.nullabilityBuilder, this.arguments,
-      this.fileUri, this.charOffset,
-      {required this.instanceTypeVariableAccess})
-      : assert(name is String || name is QualifiedName);
+  final bool _forTypeLiteral;
 
-  NamedTypeBuilder.fromTypeDeclarationBuilder(
-      TypeDeclarationBuilder this.declaration, this.nullabilityBuilder,
+  DartType? _type;
+
+  NamedTypeBuilder(this.name, this.nullabilityBuilder,
       {this.arguments,
       this.fileUri,
       this.charOffset,
-      required this.instanceTypeVariableAccess})
-      : this.name = declaration.name;
+      required InstanceTypeVariableAccessState instanceTypeVariableAccess,
+      bool forTypeLiteral: false})
+      : assert(name is String || name is QualifiedName),
+        this._instanceTypeVariableAccess = instanceTypeVariableAccess,
+        this._forTypeLiteral = forTypeLiteral;
+
+  NamedTypeBuilder.forDartType(DartType this._type,
+      TypeDeclarationBuilder this._declaration, this.nullabilityBuilder,
+      {this.arguments})
+      : this.name = _declaration.name,
+        this._instanceTypeVariableAccess =
+            InstanceTypeVariableAccessState.Unexpected,
+        this.fileUri = null,
+        this.charOffset = null,
+        this._forTypeLiteral = false;
+
+  NamedTypeBuilder.fromTypeDeclarationBuilder(
+      TypeDeclarationBuilder this._declaration, this.nullabilityBuilder,
+      {this.arguments,
+      this.fileUri,
+      this.charOffset,
+      required InstanceTypeVariableAccessState instanceTypeVariableAccess,
+      DartType? type})
+      : this.name = _declaration.name,
+        this._forTypeLiteral = false,
+        this._instanceTypeVariableAccess = instanceTypeVariableAccess,
+        this._type = type;
+
+  NamedTypeBuilder.forInvalidType(
+      String this.name, this.nullabilityBuilder, LocatedMessage message,
+      {List<LocatedMessage>? context})
+      : _declaration =
+            new InvalidTypeDeclarationBuilder(name, message, context: context),
+        this.fileUri = message.uri,
+        this.charOffset = message.charOffset,
+        this._instanceTypeVariableAccess =
+            InstanceTypeVariableAccessState.Unexpected,
+        this._forTypeLiteral = false,
+        this._type = const InvalidType();
+
+  @override
+  TypeDeclarationBuilder? get declaration => _declaration;
 
   @override
   bool get isVoidType => declaration is VoidTypeDeclarationBuilder;
 
-  @override
-  void bind(TypeDeclarationBuilder declaration) {
-    this.declaration = declaration.origin;
+  void bind(LibraryBuilder libraryBuilder, TypeDeclarationBuilder declaration) {
+    _declaration = declaration.origin;
+    _check(libraryBuilder);
+  }
+
+  String get nameText {
+    if (name is Identifier) {
+      Identifier identifier = name as Identifier;
+      return identifier.name;
+    } else {
+      assert(name is String);
+      return name as String;
+    }
   }
 
   int get nameOffset {
@@ -138,25 +185,16 @@
       Identifier identifier = name as Identifier;
       return identifier.charOffset;
     }
-    return -1; // TODO(eernst): make it possible to get offset.
+    return charOffset!;
   }
 
   int get nameLength {
-    if (name is Identifier) {
-      Identifier identifier = name as Identifier;
-      return identifier.name.length;
-    } else if (name is String) {
-      String nameString = name as String;
-      return nameString.length;
-    } else {
-      return noLength;
-    }
+    return nameText.length;
   }
 
-  @override
   void resolveIn(
       Scope scope, int charOffset, Uri fileUri, LibraryBuilder library) {
-    if (declaration != null) return;
+    if (_declaration != null) return;
     final Object name = this.name;
     Builder? member;
     if (name is QualifiedName) {
@@ -171,72 +209,106 @@
     } else {
       unhandled("${name.runtimeType}", "resolveIn", charOffset, fileUri);
     }
-    if (member is TypeVariableBuilder) {
-      declaration = member.origin;
-      if (arguments != null) {
-        String typeName;
-        int typeNameOffset;
-        if (name is Identifier) {
-          typeName = name.name;
-          typeNameOffset = name.charOffset;
-        } else {
-          typeName = name as String;
-          typeNameOffset = charOffset;
-        }
+    if (member is TypeDeclarationBuilder) {
+      bind(library, member);
+    } else {
+      Template<Message Function(String name)> template =
+          member == null ? templateTypeNotFound : templateNotAType;
+      String flatName = flattenName(name, charOffset, fileUri);
+      int length = name is Identifier
+          ? name.endCharOffset - charOffset
+          : flatName.length;
+      Message message;
+      List<LocatedMessage>? context;
+      if (member == null) {
+        template = templateTypeNotFound;
+        message = template.withArguments(flatName);
+      } else {
+        template = templateNotAType;
+        context = <LocatedMessage>[
+          messageNotATypeContext.withLocation(
+              member.fileUri!,
+              member.charOffset,
+              name is Identifier ? name.name.length : "$name".length)
+        ];
+        message = template.withArguments(flatName);
+      }
+      library.addProblem(message, charOffset, length, fileUri,
+          context: context);
+      TypeDeclarationBuilder declaration = buildInvalidTypeDeclarationBuilder(
+          message.withLocation(fileUri, charOffset, length),
+          context: context);
+      bind(library, declaration);
+    }
+  }
+
+  void _check(LibraryBuilder library) {
+    if (_declaration is InvalidTypeDeclarationBuilder) {
+      return;
+    }
+    if (arguments != null) {
+      if (_declaration!.isTypeVariable) {
+        String typeName = nameText;
+        int typeNameOffset = nameOffset;
         Message message =
             templateTypeArgumentsOnTypeVariable.withArguments(typeName);
         library.addProblem(message, typeNameOffset, typeName.length, fileUri);
-        declaration = buildInvalidTypeDeclarationBuilder(
-            message.withLocation(fileUri, typeNameOffset, typeName.length));
-      }
-      return;
-    } else if (member is TypeDeclarationBuilder) {
-      declaration = member.origin;
-      if (!declaration!.isExtension ||
-          library is SourceLibraryBuilder &&
-              library.enableExtensionTypesInLibrary) {
-        return;
+        // TODO(johnniwinther): Should we retain the declaration to support
+        //  additional errors?
+        _declaration = buildInvalidTypeDeclarationBuilder(
+            message.withLocation(fileUri!, typeNameOffset, typeName.length));
+      } else if (arguments!.length != declaration!.typeVariablesCount) {
+        int typeNameLength = nameLength;
+        int typeNameOffset = nameOffset;
+        Message message = templateTypeArgumentMismatch
+            .withArguments(declaration!.typeVariablesCount);
+        library.addProblem(message, typeNameOffset, typeNameLength, fileUri);
+        _declaration = buildInvalidTypeDeclarationBuilder(
+            message.withLocation(fileUri!, typeNameOffset, typeNameLength));
       }
     }
-    Template<Message Function(String name)> template =
-        member == null ? templateTypeNotFound : templateNotAType;
-    String flatName = flattenName(name, charOffset, fileUri);
-    int length =
-        name is Identifier ? name.endCharOffset - charOffset : flatName.length;
-    Message message;
-    List<LocatedMessage>? context;
-    if (member == null) {
-      template = templateTypeNotFound;
-      message = template.withArguments(flatName);
-    } else if (declaration != null &&
-        declaration!.isExtension &&
+    if (_declaration!.isExtension &&
         library is SourceLibraryBuilder &&
         !library.enableExtensionTypesInLibrary) {
-      message = templateExperimentNotEnabled.withArguments('extension-types',
+      Message message = templateExperimentNotEnabled.withArguments(
+          'extension-types',
           library.enableExtensionTypesVersionInLibrary.toText());
-    } else {
-      template = templateNotAType;
-      context = <LocatedMessage>[
-        messageNotATypeContext.withLocation(member.fileUri!, member.charOffset,
-            name is Identifier ? name.name.length : "$name".length)
-      ];
-      message = template.withArguments(flatName);
-    }
-    library.addProblem(message, charOffset, length, fileUri, context: context);
-    declaration = buildInvalidTypeDeclarationBuilder(
-        message.withLocation(fileUri, charOffset, length),
-        context: context);
-  }
-
-  @override
-  void check(LibraryBuilder library, int charOffset, Uri fileUri) {
-    if (arguments != null &&
-        arguments!.length != declaration!.typeVariablesCount) {
-      Message message = templateTypeArgumentMismatch
-          .withArguments(declaration!.typeVariablesCount);
-      library.addProblem(message, charOffset, noLength, fileUri);
-      declaration = buildInvalidTypeDeclarationBuilder(
-          message.withLocation(fileUri, charOffset, noLength));
+      int typeNameLength = nameLength;
+      int typeNameOffset = nameOffset;
+      library.addProblem(message, typeNameOffset, typeNameLength, fileUri);
+      _declaration = buildInvalidTypeDeclarationBuilder(
+          message.withLocation(fileUri!, typeNameOffset, typeNameLength));
+    } else if (_declaration!.isTypeVariable) {
+      TypeVariableBuilder typeParameterBuilder =
+          _declaration as TypeVariableBuilder;
+      if (typeParameterBuilder.kind == TypeVariableKind.classMixinOrEnum ||
+          typeParameterBuilder.kind == TypeVariableKind.extension ||
+          typeParameterBuilder.kind == TypeVariableKind.extensionSynthesized) {
+        switch (_instanceTypeVariableAccess) {
+          case InstanceTypeVariableAccessState.Disallowed:
+            int typeNameLength = nameLength;
+            int typeNameOffset = nameOffset;
+            Message message = messageTypeVariableInStaticContext;
+            library.addProblem(
+                message, typeNameOffset, typeNameLength, fileUri);
+            _declaration = buildInvalidTypeDeclarationBuilder(
+                message.withLocation(fileUri!, typeNameOffset, typeNameLength));
+            return;
+          case InstanceTypeVariableAccessState.Invalid:
+            int typeNameLength = nameLength;
+            int typeNameOffset = nameOffset;
+            Message message = messageTypeVariableInStaticContext;
+            _declaration = buildInvalidTypeDeclarationBuilder(
+                message.withLocation(fileUri!, typeNameOffset, typeNameLength));
+            return;
+          case InstanceTypeVariableAccessState.Unexpected:
+            assert(false,
+                "Unexpected instance type variable $typeParameterBuilder");
+            break;
+          case InstanceTypeVariableAccessState.Allowed:
+            break;
+        }
+      }
     }
   }
 
@@ -269,23 +341,18 @@
         context: context);
   }
 
-  Supertype? handleInvalidSupertype(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
+  Supertype? _handleInvalidSupertype(LibraryBuilder library) {
     Template<Message Function(String name)> template =
         declaration!.isTypeVariable
             ? templateSupertypeIsTypeVariable
             : templateSupertypeIsIllegal;
-    library.addProblem(template.withArguments(fullNameForErrors), charOffset,
+    library.addProblem(template.withArguments(fullNameForErrors), charOffset!,
         noLength, fileUri);
     return null;
   }
 
-  Supertype? handleInvalidAliasedSupertype(
-      LibraryBuilder library,
-      int charOffset,
-      Uri fileUri,
-      TypeAliasBuilder aliasBuilder,
-      DartType type) {
+  Supertype? _handleInvalidAliasedSupertype(
+      LibraryBuilder library, TypeAliasBuilder aliasBuilder, DartType type) {
     // Don't report the error in case of InvalidType. An error has already been
     // reported in this case.
     if (type is InvalidType) return null;
@@ -303,7 +370,7 @@
       message = templateSupertypeIsIllegalAliased.withArguments(
           fullNameForErrors, type, library.isNonNullableByDefault);
     }
-    library.addProblem(message, charOffset, noLength, fileUri, context: [
+    library.addProblem(message, charOffset!, noLength, fileUri, context: [
       messageTypedefCause.withLocation(
           aliasBuilder.fileUri, aliasBuilder.charOffset, noLength),
     ]);
@@ -311,18 +378,12 @@
   }
 
   @override
-  DartType build(LibraryBuilder library, {TypedefType? origin}) {
-    return buildInternal(library, origin: origin, forTypeLiteral: false);
+  DartType build(LibraryBuilder library) {
+    return _type ??= _buildInternal(library);
   }
 
-  @override
-  DartType buildTypeLiteralType(LibraryBuilder library, {TypedefType? origin}) {
-    return buildInternal(library, origin: origin, forTypeLiteral: true);
-  }
-
-  DartType declarationBuildType(LibraryBuilder library,
-      {required bool forTypeLiteral}) {
-    if (forTypeLiteral) {
+  DartType _declarationBuildType(LibraryBuilder library) {
+    if (_forTypeLiteral) {
       return declaration!
           .buildTypeLiteralType(library, nullabilityBuilder, arguments);
     } else {
@@ -330,39 +391,11 @@
     }
   }
 
-  // TODO(johnniwinther): Store [origin] on the built type.
-  DartType buildInternal(LibraryBuilder library,
-      {TypedefType? origin, required bool forTypeLiteral}) {
+  DartType _buildInternal(LibraryBuilder library) {
     assert(declaration != null, "Declaration has not been resolved on $this.");
-    if (declaration!.isTypeVariable) {
-      TypeVariableBuilder typeParameterBuilder =
-          declaration as TypeVariableBuilder;
-      TypeParameter typeParameter = typeParameterBuilder.parameter;
-      if (typeParameter.parent is Class || typeParameter.parent is Extension) {
-        switch (instanceTypeVariableAccess) {
-          case InstanceTypeVariableAccessState.Disallowed:
-            library.addProblem(
-                messageTypeVariableInStaticContext,
-                charOffset ?? TreeNode.noOffset,
-                noLength,
-                fileUri ?? library.fileUri);
-            return const InvalidType();
-          case InstanceTypeVariableAccessState.Invalid:
-            return const InvalidType();
-          case InstanceTypeVariableAccessState.Unexpected:
-            assert(false,
-                "Unexpected instance type variable $typeParameterBuilder");
-            break;
-          case InstanceTypeVariableAccessState.Allowed:
-            break;
-        }
-      }
-    }
-
     if (library is SourceLibraryBuilder) {
       int uncheckedTypedefTypeCount = library.uncheckedTypedefTypes.length;
-      DartType builtType =
-          declarationBuildType(library, forTypeLiteral: forTypeLiteral);
+      DartType builtType = _declarationBuildType(library);
       // Set locations for new unchecked TypedefTypes for error reporting.
       for (int i = uncheckedTypedefTypeCount;
           i < library.uncheckedTypedefTypes.length;
@@ -375,19 +408,18 @@
       }
       return builtType;
     } else {
-      return declarationBuildType(library, forTypeLiteral: forTypeLiteral);
+      return _declarationBuildType(library);
     }
   }
 
   @override
-  Supertype? buildSupertype(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
+  Supertype? buildSupertype(LibraryBuilder library) {
     TypeDeclarationBuilder declaration = this.declaration!;
     if (declaration is ClassBuilder) {
       if (declaration.isNullClass && !library.mayImplementRestrictedTypes) {
         library.addProblem(
             templateExtendingRestricted.withArguments(declaration.name),
-            charOffset,
+            charOffset!,
             noLength,
             fileUri);
       }
@@ -438,8 +470,7 @@
         return new Supertype((unaliasedDeclaration as ClassBuilder).cls,
             <DartType>[type.typeArgument]);
       }
-      return handleInvalidAliasedSupertype(
-          library, charOffset, fileUri, aliasBuilder, type);
+      return _handleInvalidAliasedSupertype(library, aliasBuilder, type);
     } else if (declaration is InvalidTypeDeclarationBuilder) {
       library.addProblem(
           declaration.message.messageObject,
@@ -449,12 +480,11 @@
           severity: Severity.error);
       return null;
     }
-    return handleInvalidSupertype(library, charOffset, fileUri);
+    return _handleInvalidSupertype(library);
   }
 
   @override
-  Supertype? buildMixedInType(
-      LibraryBuilder library, int charOffset, Uri fileUri) {
+  Supertype? buildMixedInType(LibraryBuilder library) {
     TypeDeclarationBuilder declaration = this.declaration!;
     if (declaration is ClassBuilder) {
       return declaration.buildMixedInType(library, arguments);
@@ -464,8 +494,7 @@
       if (type is InterfaceType && type.nullability != Nullability.nullable) {
         return new Supertype(type.classNode, type.typeArguments);
       }
-      return handleInvalidAliasedSupertype(
-          library, charOffset, fileUri, aliasBuilder, type);
+      return _handleInvalidAliasedSupertype(library, aliasBuilder, type);
     } else if (declaration is InvalidTypeDeclarationBuilder) {
       library.addProblem(
           declaration.message.messageObject,
@@ -475,7 +504,7 @@
           severity: Severity.error);
       return null;
     }
-    return handleInvalidSupertype(library, charOffset, fileUri);
+    return _handleInvalidSupertype(library);
   }
 
   @override
@@ -496,15 +525,12 @@
         i++;
       }
       if (arguments != null) {
-        NamedTypeBuilder result = new NamedTypeBuilder(
-            name, nullabilityBuilder, arguments, fileUri, charOffset,
-            instanceTypeVariableAccess: instanceTypeVariableAccess);
-        if (declaration != null) {
-          result.bind(declaration!);
-        } else {
-          throw new UnsupportedError("Unbound type in substitution: $result.");
-        }
-        return result;
+        return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+            declaration!, nullabilityBuilder,
+            arguments: arguments,
+            fileUri: fileUri,
+            charOffset: charOffset,
+            instanceTypeVariableAccess: _instanceTypeVariableAccess);
       }
     }
     return this;
@@ -523,11 +549,13 @@
             .clone(newTypes, contextLibrary, contextDeclaration);
       }, growable: false);
     }
-    NamedTypeBuilder newType = new NamedTypeBuilder(
-        name, nullabilityBuilder, clonedArguments, fileUri, charOffset,
-        instanceTypeVariableAccess: instanceTypeVariableAccess);
+    NamedTypeBuilder newType = new NamedTypeBuilder(name, nullabilityBuilder,
+        arguments: clonedArguments,
+        fileUri: fileUri,
+        charOffset: charOffset,
+        instanceTypeVariableAccess: _instanceTypeVariableAccess);
     if (declaration is BuiltinTypeDeclarationBuilder) {
-      newType.declaration = declaration;
+      newType._declaration = declaration;
     } else {
       newTypes.add(newType);
     }
@@ -537,9 +565,30 @@
   @override
   NamedTypeBuilder withNullabilityBuilder(
       NullabilityBuilder nullabilityBuilder) {
-    return new NamedTypeBuilder(
-        name, nullabilityBuilder, arguments, fileUri, charOffset,
-        instanceTypeVariableAccess: instanceTypeVariableAccess)
-      ..bind(declaration!);
+    return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+        declaration!, nullabilityBuilder,
+        arguments: arguments,
+        fileUri: fileUri,
+        charOffset: charOffset,
+        instanceTypeVariableAccess: _instanceTypeVariableAccess);
+  }
+
+  /// Returns a copy of this named type using the provided type [arguments]
+  /// instead of the original type arguments.
+  NamedTypeBuilder withArguments(List<TypeBuilder> arguments) {
+    if (_declaration != null) {
+      return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+          _declaration!, nullabilityBuilder,
+          arguments: arguments,
+          fileUri: fileUri,
+          charOffset: charOffset,
+          instanceTypeVariableAccess: _instanceTypeVariableAccess);
+    } else {
+      return new NamedTypeBuilder(name, nullabilityBuilder,
+          arguments: arguments,
+          fileUri: fileUri,
+          charOffset: charOffset,
+          instanceTypeVariableAccess: _instanceTypeVariableAccess);
+    }
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 73607dd..72d12fa 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -4,9 +4,8 @@
 
 library fasta.type_builder;
 
-import 'package:kernel/ast.dart' show DartType, Supertype, TypedefType;
+import 'package:kernel/ast.dart' show DartType, Supertype;
 
-import '../scope.dart';
 import '../source/source_library_builder.dart';
 import 'library_builder.dart';
 import 'named_type_builder.dart';
@@ -27,14 +26,6 @@
   /// occurred, or `null` if the type was synthesized.
   int? get charOffset;
 
-  void resolveIn(
-      Scope scope, int charOffset, Uri fileUri, LibraryBuilder library) {}
-
-  /// See `UnresolvedType.checkType`.
-  void check(LibraryBuilder library, int charOffset, Uri fileUri) {}
-
-  void bind(TypeDeclarationBuilder builder) {}
-
   /// May return null, for example, for mixin applications.
   Object? get name;
 
@@ -69,17 +60,11 @@
 
   String get fullNameForErrors => "${printOn(new StringBuffer())}";
 
-  DartType build(LibraryBuilder library, {TypedefType? origin});
+  DartType build(LibraryBuilder library);
 
-  DartType buildTypeLiteralType(LibraryBuilder library, {TypedefType? origin}) {
-    return build(library, origin: origin);
-  }
+  Supertype? buildSupertype(LibraryBuilder library);
 
-  Supertype? buildSupertype(
-      LibraryBuilder library, int charOffset, Uri fileUri);
-
-  Supertype? buildMixedInType(
-      LibraryBuilder library, int charOffset, Uri fileUri);
+  Supertype? buildMixedInType(LibraryBuilder library);
 
   TypeBuilder withNullabilityBuilder(NullabilityBuilder nullabilityBuilder);
 
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index 077db8d..e999e89 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -28,6 +28,25 @@
 import 'type_builder.dart';
 import 'type_declaration_builder.dart';
 
+enum TypeVariableKind {
+  /// A type variable declared on a function, method, local function or
+  /// function type.
+  function,
+
+  /// A type variable declared on a class, mixin or enum.
+  classMixinOrEnum,
+
+  /// A type variable declared on an extension.
+  extension,
+
+  /// A type variable on an extension instance member synthesized from an
+  /// extension type variable.
+  extensionSynthesized,
+
+  /// A type variable builder created from a kernel node.
+  fromKernel,
+}
+
 class TypeVariableBuilder extends TypeDeclarationBuilderImpl {
   /// Sentinel value used to indicate that the variable has no name. This is
   /// used for error recovery.
@@ -41,7 +60,7 @@
 
   TypeVariableBuilder? actualOrigin;
 
-  final bool isExtensionTypeParameter;
+  final TypeVariableKind kind;
 
   @override
   final Uri? fileUri;
@@ -49,7 +68,7 @@
   TypeVariableBuilder(
       String name, Builder? compilationUnit, int charOffset, this.fileUri,
       {this.bound,
-      this.isExtensionTypeParameter: false,
+      required this.kind,
       int? variableVariance,
       List<MetadataBuilder>? metadata})
       : actualParameter =
@@ -63,7 +82,7 @@
       : actualParameter = parameter,
         // TODO(johnniwinther): Do we need to support synthesized type
         //  parameters from kernel?
-        this.isExtensionTypeParameter = false,
+        kind = TypeVariableKind.fromKernel,
         fileUri = compilationUnit.fileUri,
         super(null, 0, parameter.name ?? '', compilationUnit,
             parameter.fileOffset);
@@ -194,7 +213,8 @@
     // is declared on.
     return new TypeVariableBuilder(name, parent!, charOffset, fileUri,
         bound: bound?.clone(newTypes, contextLibrary, contextDeclaration),
-        variableVariance: variance);
+        variableVariance: variance,
+        kind: kind);
   }
 
   void buildOutlineExpressions(
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index b53d488..4665e61 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -333,9 +333,11 @@
     return library!.lookupLocalMember(cls.name, required: true) as ClassBuilder;
   }
 
+  late TypeBuilderComputer _typeBuilderComputer = new TypeBuilderComputer(this);
+
   @override
   TypeBuilder computeTypeBuilder(DartType type) {
-    return type.accept(new TypeBuilderComputer(this));
+    return type.accept(_typeBuilderComputer);
   }
 
   bool containsLibraryBuilder(Uri importUri) =>
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 5fc0557..5dc9c13 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -96,6 +96,8 @@
 
 import 'builder/name_iterator.dart' show NameIterator;
 
+import 'builder/named_type_builder.dart' show NamedTypeBuilder;
+
 import 'builder/type_builder.dart' show TypeBuilder;
 
 import 'builder/type_declaration_builder.dart' show TypeDeclarationBuilder;
@@ -1377,21 +1379,26 @@
       Map<LibraryBuilder, Map<String, Builder>> replacementMap,
       Map<LibraryBuilder, Map<String, Builder>> replacementSettersMap,
       TypeBuilder? typeBuilder) {
-    TypeDeclarationBuilder? declaration = typeBuilder?.declaration;
-    Builder? parent = declaration?.parent;
-    if (parent == null) return;
-    Map<String, Builder>? childReplacementMap;
-    if (declaration!.isSetter) {
-      childReplacementMap = replacementSettersMap[parent];
-    } else {
-      childReplacementMap = replacementMap[parent];
-    }
+    if (typeBuilder is NamedTypeBuilder) {
+      TypeDeclarationBuilder? declaration = typeBuilder.declaration;
+      Builder? parent = declaration?.parent;
+      if (parent == null) return;
+      Map<String, Builder>? childReplacementMap;
+      if (declaration!.isSetter) {
+        childReplacementMap = replacementSettersMap[parent];
+      } else {
+        childReplacementMap = replacementMap[parent];
+      }
 
-    if (childReplacementMap == null) return;
-    Builder replacement = childReplacementMap[declaration.name]!;
-    // ignore: unnecessary_null_comparison
-    assert(replacement != null, "Didn't find the replacement for $typeBuilder");
-    typeBuilder!.bind(replacement as TypeDeclarationBuilder);
+      if (childReplacementMap == null) return;
+      Builder replacement = childReplacementMap[declaration.name]!;
+      assert(
+          // ignore: unnecessary_null_comparison
+          replacement != null,
+          "Didn't find the replacement for $typeBuilder");
+      typeBuilder.bind(
+          parent as LibraryBuilder, replacement as TypeDeclarationBuilder);
+    }
   }
 
   /// Allows for updating the list of needed libraries.
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index ff5247a..80ca725 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4092,16 +4092,11 @@
         Message message = fasta.templateNotAType.withArguments(displayName);
         libraryBuilder.addProblem(
             message, offset, lengthOfSpan(beginToken, suffix), uri);
-        push(new NamedTypeBuilder.fromTypeDeclarationBuilder(
-            new InvalidTypeDeclarationBuilder(
-                name,
-                message.withLocation(
-                    uri, offset, lengthOfSpan(beginToken, suffix))),
+        push(new NamedTypeBuilder.forInvalidType(
+            name,
             libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
-            fileUri: uri,
-            charOffset: offset,
-            instanceTypeVariableAccess:
-                InstanceTypeVariableAccessState.Unexpected));
+            message.withLocation(
+                uri, offset, lengthOfSpan(beginToken, suffix))));
         return;
       }
     }
@@ -4119,7 +4114,8 @@
       }
       result = name.buildTypeWithResolvedArguments(
           libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), arguments,
-          allowPotentiallyConstantType: allowPotentiallyConstantType);
+          allowPotentiallyConstantType: allowPotentiallyConstantType,
+          forTypeLiteral: false);
       // ignore: unnecessary_null_comparison
       if (result == null) {
         unhandled("null", "result", beginToken.charOffset, uri);
@@ -4128,16 +4124,11 @@
       // TODO(ahe): Arguments could be passed here.
       libraryBuilder.addProblem(
           name.message, name.charOffset, name.name.length, name.fileUri);
-      result = new NamedTypeBuilder.fromTypeDeclarationBuilder(
-          new InvalidTypeDeclarationBuilder(
-              name.name,
-              name.message.withLocation(
-                  name.fileUri, name.charOffset, name.name.length)),
+      result = new NamedTypeBuilder.forInvalidType(
+          name.name,
           libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable),
-          fileUri: name.fileUri,
-          charOffset: name.charOffset,
-          instanceTypeVariableAccess:
-              InstanceTypeVariableAccessState.Unexpected);
+          name.message
+              .withLocation(name.fileUri, name.charOffset, name.name.length));
     } else {
       unhandled(
           "${name.runtimeType}", "handleType", beginToken.charOffset, uri);
@@ -6802,7 +6793,8 @@
           token.charOffset, uri);
     }
     TypeVariableBuilder variable = new TypeVariableBuilder(
-        typeVariableName, libraryBuilder, typeVariableCharOffset, uri);
+        typeVariableName, libraryBuilder, typeVariableCharOffset, uri,
+        kind: TypeVariableKind.function);
     if (annotations != null) {
       inferAnnotations(variable.parameter, annotations);
       for (Expression annotation in annotations) {
@@ -6862,11 +6854,6 @@
         "Found a type not bound to a declaration in BodyBuilder.");
     for (int i = 0; i < typeVariables.length; ++i) {
       typeVariables[i].defaultType = calculatedBounds[i];
-      typeVariables[i].defaultType!.resolveIn(
-          scope,
-          typeVariables[i].charOffset,
-          typeVariables[i].fileUri!,
-          libraryBuilder);
       typeVariables[i].finish(
           libraryBuilder,
           libraryBuilder.loader.target.objectClassBuilder,
@@ -7251,43 +7238,17 @@
         TypeParameter typeParameter = typeParameterBuilder.parameter;
         if (typeParameter.parent is Class ||
             typeParameter.parent is Extension) {
-          switch (builder.instanceTypeVariableAccess) {
-            case InstanceTypeVariableAccessState.Allowed:
-              if (constantContext != ConstantContext.none &&
-                  (!inConstructorInitializer ||
-                      !allowPotentiallyConstantType)) {
-                LocatedMessage message =
-                    fasta.messageTypeVariableInConstantContext.withLocation(
-                        builder.fileUri!,
-                        builder.charOffset!,
-                        typeParameter.name!.length);
-                builder.bind(new InvalidTypeDeclarationBuilder(
+          if (constantContext != ConstantContext.none &&
+              (!inConstructorInitializer || !allowPotentiallyConstantType)) {
+            LocatedMessage message = fasta.messageTypeVariableInConstantContext
+                .withLocation(builder.fileUri!, builder.charOffset!,
+                    typeParameter.name!.length);
+            builder.bind(
+                libraryBuilder,
+                new InvalidTypeDeclarationBuilder(
                     typeParameter.name!, message));
-                addProblem(
-                    message.messageObject, message.charOffset, message.length);
-              }
-              break;
-            case InstanceTypeVariableAccessState.Disallowed:
-              // TODO(johnniwinther): Can we unify this check with the similar
-              // check in NamedTypeBuilder.buildTypeInternal. If we skip it
-              // here, the error below (type variable in constant context) will
-              // be emitted _instead_ of this (type variable in static context),
-              // which seems like an odd prioritization.
-              // TODO: Handle this case.
-              LocatedMessage message = fasta.messageTypeVariableInStaticContext
-                  .withLocation(builder.fileUri!, builder.charOffset!,
-                      typeParameter.name!.length);
-              builder.bind(new InvalidTypeDeclarationBuilder(
-                  typeParameter.name!, message));
-              addProblem(
-                  message.messageObject, message.charOffset, message.length);
-              break;
-            case InstanceTypeVariableAccessState.Invalid:
-              break;
-            case InstanceTypeVariableAccessState.Unexpected:
-              assert(false,
-                  "Unexpected instance type variable $typeParameterBuilder");
-              break;
+            addProblem(
+                message.messageObject, message.charOffset, message.length);
           }
         }
       }
@@ -7482,14 +7443,6 @@
   }
 
   @override
-  DartType buildTypeLiteralDartType(TypeBuilder typeBuilder,
-      {required bool allowPotentiallyConstantType}) {
-    return validateTypeVariableUse(typeBuilder,
-            allowPotentiallyConstantType: allowPotentiallyConstantType)
-        .buildTypeLiteralType(libraryBuilder);
-  }
-
-  @override
   List<DartType> buildDartTypeArguments(List<TypeBuilder>? unresolvedTypes,
       {required bool allowPotentiallyConstantType}) {
     if (unresolvedTypes == null) return <DartType>[];
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index d4540fb..4c64564 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -273,21 +273,13 @@
   /// create a [TypeBuilder] for a valid type.
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {required bool allowPotentiallyConstantType}) {
-    // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(
-        token.lexeme,
-        nullabilityBuilder,
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: _helper.instanceTypeVariableAccessState);
+      {required bool allowPotentiallyConstantType,
+      required bool forTypeLiteral}) {
     Message message = templateNotAType.withArguments(token.lexeme);
     _helper.libraryBuilder
         .addProblem(message, fileOffset, lengthForToken(token), _uri);
-    result.bind(result.buildInvalidTypeDeclarationBuilder(
-        message.withLocation(_uri, fileOffset, lengthForToken(token))));
-    return result;
+    return new NamedTypeBuilder.forInvalidType(token.lexeme, nullabilityBuilder,
+        message.withLocation(_uri, fileOffset, lengthForToken(token)));
   }
 
   /* Expression | Generator */ Object qualifiedLookup(Token name) {
@@ -2910,12 +2902,14 @@
   @override
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {required bool allowPotentiallyConstantType}) {
+      {required bool allowPotentiallyConstantType,
+      required bool forTypeLiteral}) {
     String name = "${prefixGenerator._plainNameForRead}."
         "${suffixGenerator._plainNameForRead}";
     TypeBuilder type = suffixGenerator.buildTypeWithResolvedArguments(
         nullabilityBuilder, arguments,
-        allowPotentiallyConstantType: allowPotentiallyConstantType);
+        allowPotentiallyConstantType: allowPotentiallyConstantType,
+        forTypeLiteral: forTypeLiteral);
     LocatedMessage message;
     if (type is NamedTypeBuilder &&
         type.declaration is InvalidTypeDeclarationBuilder) {
@@ -2933,14 +2927,10 @@
           .withLocation(
               _uri, charOffset, lengthOfSpan(prefixGenerator.token, token));
     }
-    // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(name, nullabilityBuilder,
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     _helper.libraryBuilder.addProblem(
         message.messageObject, message.charOffset, message.length, message.uri);
-    result.bind(result.buildInvalidTypeDeclarationBuilder(message));
-    return result;
+    return new NamedTypeBuilder.forInvalidType(
+        name, nullabilityBuilder, message);
   }
 
   @override
@@ -3039,40 +3029,15 @@
   @override
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {required bool allowPotentiallyConstantType}) {
-    if (declaration.isExtension && !_helper.enableExtensionTypesInLibrary) {
-      // Extension declarations cannot be used as types.
-      return super.buildTypeWithResolvedArguments(nullabilityBuilder, arguments,
-          allowPotentiallyConstantType: allowPotentiallyConstantType);
-    }
-    if (arguments != null) {
-      int expected = declaration.typeVariablesCount;
-      if (arguments.length != expected) {
-        // Build the type arguments to report any errors they may have.
-        _helper.buildDartTypeArguments(arguments,
-            allowPotentiallyConstantType: allowPotentiallyConstantType);
-        _helper.warnTypeArgumentsMismatch(
-            declaration.name, expected, fileOffset);
-        // We ignore the provided arguments, which will in turn return the
-        // raw type below.
-        // TODO(sigmund): change to use an InvalidType and include the raw type
-        // as a recovery node once the IR can represent it (Issue #29840).
-        arguments = null;
-      }
-    }
-
-    List<TypeBuilder>? argumentBuilders;
-    if (arguments != null) {
-      argumentBuilders =
-          new List<TypeBuilder>.generate(arguments.length, (int i) {
-        return _helper.validateTypeVariableUse(arguments![i],
-            allowPotentiallyConstantType: allowPotentiallyConstantType);
-      }, growable: false);
-    }
-    return new NamedTypeBuilder(
-        targetName, nullabilityBuilder, argumentBuilders, _uri, fileOffset,
-        instanceTypeVariableAccess: _helper.instanceTypeVariableAccessState)
-      ..bind(declaration);
+      {required bool allowPotentiallyConstantType,
+      required bool forTypeLiteral}) {
+    return new NamedTypeBuilder(targetName, nullabilityBuilder,
+        arguments: arguments,
+        fileUri: _uri,
+        charOffset: fileOffset,
+        instanceTypeVariableAccess: _helper.instanceTypeVariableAccessState,
+        forTypeLiteral: forTypeLiteral)
+      ..bind(_helper.libraryBuilder, declaration);
   }
 
   @override
@@ -3115,10 +3080,10 @@
       } else {
         _expression = _forest.createTypeLiteral(
             offsetForToken(token),
-            _helper.buildTypeLiteralDartType(
+            _helper.buildDartType(
                 buildTypeWithResolvedArguments(
                     _helper.libraryBuilder.nonNullableBuilder, typeArguments,
-                    allowPotentiallyConstantType: true),
+                    allowPotentiallyConstantType: true, forTypeLiteral: true),
                 allowPotentiallyConstantType:
                     _helper.enableConstructorTearOffsInLibrary));
       }
@@ -3181,11 +3146,13 @@
             aliasedTypeArguments = <TypeBuilder>[];
             for (TypeVariableBuilder typeVariable
                 in aliasBuilder.typeVariables!) {
-              aliasedTypeArguments.add(new NamedTypeBuilder(typeVariable.name,
-                  const NullabilityBuilder.omitted(), null, _uri, fileOffset,
+              aliasedTypeArguments.add(new NamedTypeBuilder(
+                  typeVariable.name, const NullabilityBuilder.omitted(),
+                  fileUri: _uri,
+                  charOffset: fileOffset,
                   instanceTypeVariableAccess:
                       _helper.instanceTypeVariableAccessState)
-                ..bind(typeVariable));
+                ..bind(_helper.libraryBuilder, typeVariable));
             }
           }
           unaliasedTypeArguments =
@@ -4183,18 +4150,12 @@
   @override
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {required bool allowPotentiallyConstantType}) {
+      {required bool allowPotentiallyConstantType,
+      required bool forTypeLiteral}) {
     Template<Message Function(String, String)> template = isUnresolved
         ? templateUnresolvedPrefixInTypeAnnotation
         : templateNotAPrefixInTypeAnnotation;
     // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(
-        _plainNameForRead,
-        nullabilityBuilder,
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     Message message =
         template.withArguments(prefixGenerator.token.lexeme, token.lexeme);
     _helper.libraryBuilder.addProblem(
@@ -4202,11 +4163,11 @@
         offsetForToken(prefixGenerator.token),
         lengthOfSpan(prefixGenerator.token, token),
         _uri);
-    result.bind(result.buildInvalidTypeDeclarationBuilder(message.withLocation(
-        _uri,
-        offsetForToken(prefixGenerator.token),
-        lengthOfSpan(prefixGenerator.token, token))));
-    return result;
+    return new NamedTypeBuilder.forInvalidType(
+        _plainNameForRead,
+        nullabilityBuilder,
+        message.withLocation(_uri, offsetForToken(prefixGenerator.token),
+            lengthOfSpan(prefixGenerator.token, token)));
   }
 
   @override
@@ -4309,19 +4270,11 @@
   @override
   TypeBuilder buildTypeWithResolvedArguments(
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
-      {required bool allowPotentiallyConstantType}) {
-    // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here?
-    NamedTypeBuilder result = new NamedTypeBuilder(
-        token.lexeme,
-        nullabilityBuilder,
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
+      {required bool allowPotentiallyConstantType,
+      required bool forTypeLiteral}) {
     _helper.libraryBuilder.addProblem(message, fileOffset, noLength, _uri);
-    result.bind(result.buildInvalidTypeDeclarationBuilder(
-        message.withLocation(_uri, fileOffset, noLength)));
-    return result;
+    return new NamedTypeBuilder.forInvalidType(token.lexeme, nullabilityBuilder,
+        message.withLocation(_uri, fileOffset, noLength));
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index 4805dac..a141e17 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -160,9 +160,6 @@
   DartType buildDartType(TypeBuilder typeBuilder,
       {required bool allowPotentiallyConstantType});
 
-  DartType buildTypeLiteralDartType(TypeBuilder typeBuilder,
-      {required bool allowPotentiallyConstantType});
-
   List<DartType> buildDartTypeArguments(List<TypeBuilder>? typeArguments,
       {required bool allowPotentiallyConstantType});
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
index 9b5d76b..812152b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
@@ -68,10 +68,8 @@
 
       superclasses = new List<Supertype>.filled(
           supernode.superclasses.length + 1, dummySupertype);
-      Supertype? supertype = classBuilder.supertypeBuilder!.buildSupertype(
-          classBuilder.libraryBuilder,
-          classBuilder.charOffset,
-          classBuilder.fileUri);
+      Supertype? supertype = classBuilder.supertypeBuilder!
+          .buildSupertype(classBuilder.libraryBuilder);
       if (supertype == null) {
         // If the superclass is not an interface type we use Object instead.
         // A similar normalization is performed on [supernode] above.
@@ -117,8 +115,7 @@
 
         for (int i = 0; i < directInterfaceBuilders.length; i++) {
           Supertype? directInterface = directInterfaceBuilders[i]
-              .buildSupertype(classBuilder.libraryBuilder,
-                  classBuilder.charOffset, classBuilder.fileUri);
+              .buildSupertype(classBuilder.libraryBuilder);
           if (directInterface != null) {
             addInterface(interfaces, superclasses, directInterface);
             ClassHierarchyNode interfaceNode =
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 67f05c4..d90e037 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -102,56 +102,32 @@
 
   // 'dynamic' is always nullable.
   // TODO(johnniwinther): Why isn't this using a FixedTypeBuilder?
-  final TypeBuilder dynamicType = new NamedTypeBuilder(
-      "dynamic",
-      const NullabilityBuilder.inherent(),
-      /* arguments = */ null,
-      /* fileUri = */ null,
-      /* charOffset = */ null,
+  final NamedTypeBuilder dynamicType = new NamedTypeBuilder(
+      "dynamic", const NullabilityBuilder.inherent(),
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   final NamedTypeBuilder objectType = new NamedTypeBuilder(
-      "Object",
-      const NullabilityBuilder.omitted(),
-      /* arguments = */ null,
-      /* fileUri = */ null,
-      /* charOffset = */ null,
+      "Object", const NullabilityBuilder.omitted(),
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   // Null is always nullable.
   // TODO(johnniwinther): This could (maybe) use a FixedTypeBuilder when we
   //  have NullType?
-  final TypeBuilder nullType = new NamedTypeBuilder(
-      "Null",
-      const NullabilityBuilder.inherent(),
-      /* arguments = */ null,
-      /* fileUri = */ null,
-      /* charOffset = */ null,
+  final NamedTypeBuilder nullType = new NamedTypeBuilder(
+      "Null", const NullabilityBuilder.inherent(),
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   // TODO(johnniwinther): Why isn't this using a FixedTypeBuilder?
-  final TypeBuilder bottomType = new NamedTypeBuilder(
-      "Never",
-      const NullabilityBuilder.omitted(),
-      /* arguments = */ null,
-      /* fileUri = */ null,
-      /* charOffset = */ null,
+  final NamedTypeBuilder bottomType = new NamedTypeBuilder(
+      "Never", const NullabilityBuilder.omitted(),
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   final NamedTypeBuilder enumType = new NamedTypeBuilder(
-      "Enum",
-      const NullabilityBuilder.omitted(),
-      /* arguments = */ null,
-      /* fileUri = */ null,
-      /* charOffset = */ null,
+      "Enum", const NullabilityBuilder.omitted(),
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   final NamedTypeBuilder underscoreEnumType = new NamedTypeBuilder(
-      "_Enum",
-      const NullabilityBuilder.omitted(),
-      /* arguments = */ null,
-      /* fileUri = */ null,
-      /* charOffset = */ null,
+      "_Enum", const NullabilityBuilder.omitted(),
       instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
   final bool excludeSource = !CompilerContext.current.options.embedSourceText;
@@ -385,14 +361,9 @@
     cls.implementedTypes.clear();
     cls.supertype = null;
     cls.mixedInType = null;
-    builder.supertypeBuilder = new NamedTypeBuilder(
-        "Object",
-        const NullabilityBuilder.omitted(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(objectClassBuilder);
+    builder.supertypeBuilder = new NamedTypeBuilder.fromTypeDeclarationBuilder(
+        objectClassBuilder, const NullabilityBuilder.omitted(),
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     builder.interfaceBuilders = null;
     builder.mixedInTypeBuilder = null;
   }
@@ -1208,20 +1179,29 @@
   }
 
   void setupTopAndBottomTypes() {
-    objectType.bind(loader.coreLibrary
-        .lookupLocalMember("Object", required: true) as TypeDeclarationBuilder);
+    objectType.bind(
+        loader.coreLibrary,
+        loader.coreLibrary.lookupLocalMember("Object", required: true)
+            as TypeDeclarationBuilder);
     dynamicType.bind(
+        loader.coreLibrary,
         loader.coreLibrary.lookupLocalMember("dynamic", required: true)
             as TypeDeclarationBuilder);
     ClassBuilder nullClassBuilder = loader.coreLibrary
         .lookupLocalMember("Null", required: true) as ClassBuilder;
-    nullType.bind(nullClassBuilder..isNullClass = true);
-    bottomType.bind(loader.coreLibrary
-        .lookupLocalMember("Never", required: true) as TypeDeclarationBuilder);
-    enumType.bind(loader.coreLibrary.lookupLocalMember("Enum", required: true)
-        as TypeDeclarationBuilder);
-    underscoreEnumType.bind(loader.coreLibrary
-        .lookupLocalMember("_Enum", required: true) as TypeDeclarationBuilder);
+    nullType.bind(loader.coreLibrary, nullClassBuilder..isNullClass = true);
+    bottomType.bind(
+        loader.coreLibrary,
+        loader.coreLibrary.lookupLocalMember("Never", required: true)
+            as TypeDeclarationBuilder);
+    enumType.bind(
+        loader.coreLibrary,
+        loader.coreLibrary.lookupLocalMember("Enum", required: true)
+            as TypeDeclarationBuilder);
+    underscoreEnumType.bind(
+        loader.coreLibrary,
+        loader.coreLibrary.lookupLocalMember("_Enum", required: true)
+            as TypeDeclarationBuilder);
   }
 
   void computeCoreTypes() {
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 55c1e0b..d50d234 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -268,12 +268,8 @@
       assert(false, "Unexpected named type builder declaration: $declaration.");
     }
     if (arguments != null) {
-      NamedTypeBuilder newTypeBuilder = new NamedTypeBuilder(type.name,
-          type.nullabilityBuilder, arguments, type.fileUri, type.charOffset,
-          instanceTypeVariableAccess: type.instanceTypeVariableAccess);
-      if (declaration != null) {
-        newTypeBuilder.bind(declaration);
-      } else {
+      NamedTypeBuilder newTypeBuilder = type.withArguments(arguments);
+      if (declaration == null) {
         unboundTypes.add(newTypeBuilder);
       }
       return newTypeBuilder;
@@ -305,7 +301,7 @@
           TypeVariableBuilder newTypeVariableBuilder = variables[i] =
               new TypeVariableBuilder(variable.name, variable.parent,
                   variable.charOffset, variable.fileUri,
-                  bound: bound);
+                  bound: bound, kind: TypeVariableKind.function);
           unboundTypeVariables.add(newTypeVariableBuilder);
           if (functionTypeUpperSubstitution == null) {
             functionTypeUpperSubstitution = {}..addAll(upperSubstitution);
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
index 52d0a58..591ae4d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_builder_computer.dart
@@ -31,7 +31,27 @@
 class TypeBuilderComputer implements DartTypeVisitor<TypeBuilder> {
   final Loader loader;
 
-  const TypeBuilderComputer(this.loader);
+  late final DynamicTypeDeclarationBuilder dynamicDeclaration =
+      new DynamicTypeDeclarationBuilder(
+          const DynamicType(), loader.coreLibrary, -1);
+
+  late final VoidTypeDeclarationBuilder voidDeclaration =
+      new VoidTypeDeclarationBuilder(const VoidType(), loader.coreLibrary, -1);
+
+  late final NeverTypeDeclarationBuilder neverDeclaration =
+      new NeverTypeDeclarationBuilder(
+          const NeverType.nonNullable(), loader.coreLibrary, -1);
+
+  late final NullTypeDeclarationBuilder nullDeclaration =
+      new NullTypeDeclarationBuilder(const NullType(), loader.coreLibrary, -1);
+
+  late final FutureOrTypeDeclarationBuilder futureOrDeclaration =
+      new FutureOrTypeDeclarationBuilder(
+          new FutureOrType(const DynamicType(), Nullability.nonNullable),
+          loader.coreLibrary,
+          -1);
+
+  TypeBuilderComputer(this.loader);
 
   @override
   TypeBuilder defaultDartType(DartType node) {
@@ -47,41 +67,27 @@
   @override
   TypeBuilder visitDynamicType(DynamicType node) {
     // 'dynamic' is always nullable.
-    return new NamedTypeBuilder("dynamic", const NullabilityBuilder.nullable(),
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(new DynamicTypeDeclarationBuilder(
-          const DynamicType(), loader.coreLibrary, -1));
+    return new NamedTypeBuilder.forDartType(
+        node, dynamicDeclaration, const NullabilityBuilder.inherent());
   }
 
   @override
   TypeBuilder visitVoidType(VoidType node) {
     // 'void' is always nullable.
-    return new NamedTypeBuilder("void", const NullabilityBuilder.nullable(),
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(new VoidTypeDeclarationBuilder(
-          const VoidType(), loader.coreLibrary, -1));
+    return new NamedTypeBuilder.forDartType(
+        node, voidDeclaration, const NullabilityBuilder.inherent());
   }
 
   @override
   TypeBuilder visitNeverType(NeverType node) {
-    return new NamedTypeBuilder(
-        "Never",
-        new NullabilityBuilder.fromNullability(node.nullability),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(new NeverTypeDeclarationBuilder(node, loader.coreLibrary, -1));
+    return new NamedTypeBuilder.forDartType(node, neverDeclaration,
+        new NullabilityBuilder.fromNullability(node.nullability));
   }
 
   @override
   TypeBuilder visitNullType(NullType node) {
-    return new NamedTypeBuilder("Null", new NullabilityBuilder.nullable(),
-        /* arguments = */ null, /* fileUri = */ null, /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(new NullTypeDeclarationBuilder(node, loader.coreLibrary, -1));
+    return new NamedTypeBuilder.forDartType(
+        node, nullDeclaration, const NullabilityBuilder.inherent());
   }
 
   @override
@@ -95,14 +101,9 @@
           kernelArguments.length, (int i) => kernelArguments[i].accept(this),
           growable: false);
     }
-    return new NamedTypeBuilder(
-        cls.name,
-        new NullabilityBuilder.fromNullability(node.nullability),
-        arguments,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(cls);
+    return new NamedTypeBuilder.forDartType(
+        node, cls, new NullabilityBuilder.fromNullability(node.nullability),
+        arguments: arguments);
   }
 
   @override
@@ -113,14 +114,9 @@
   @override
   TypeBuilder visitFutureOrType(FutureOrType node) {
     TypeBuilder argument = node.typeArgument.accept(this);
-    return new NamedTypeBuilder(
-        "FutureOr",
+    return new NamedTypeBuilder.forDartType(node, futureOrDeclaration,
         new NullabilityBuilder.fromNullability(node.nullability),
-        [argument],
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(new FutureOrTypeDeclarationBuilder(node, loader.coreLibrary, -1));
+        arguments: [argument]);
   }
 
   @override
@@ -183,14 +179,11 @@
     }
     LibraryBuilder library =
         loader.lookupLibraryBuilder(kernelLibrary!.importUri)!;
-    return new NamedTypeBuilder(
-        parameter.name!,
+    return new NamedTypeBuilder.fromTypeDeclarationBuilder(
+        new TypeVariableBuilder.fromKernel(parameter, library),
         new NullabilityBuilder.fromNullability(node.nullability),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
-        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Allowed)
-      ..bind(new TypeVariableBuilder.fromKernel(parameter, library));
+        instanceTypeVariableAccess: InstanceTypeVariableAccessState.Allowed,
+        type: node);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart
index 4cfbf57..fbed0bd 100644
--- a/pkg/front_end/lib/src/fasta/kernel/utils.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart
@@ -232,8 +232,9 @@
     new FixedTypeBuilder(dummyDartType, dummyUri, -1);
 final FormalParameterBuilder dummyFormalParameterBuilder =
     new FormalParameterBuilder(null, 0, null, '', null, -1, fileUri: dummyUri);
-final TypeVariableBuilder dummyTypeVariableBuilder =
-    new TypeVariableBuilder(TypeVariableBuilder.noNameSentinel, null, -1, null);
+final TypeVariableBuilder dummyTypeVariableBuilder = new TypeVariableBuilder(
+    TypeVariableBuilder.noNameSentinel, null, -1, null,
+    kind: TypeVariableKind.function);
 final Label dummyLabel = new Label('', -1);
 final FieldInfo dummyFieldInfo = new FieldInfo('', -1, null, dummyToken, -1);
 final Configuration dummyConfiguration = new Configuration(-1, '', '', '');
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 4fdb9fc..7e1207b 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -369,6 +369,54 @@
         return InstanceTypeVariableAccessState.Invalid;
     }
   }
+
+  /// Returns the kind of type variable created in the current context.
+  TypeVariableKind get typeVariableKind {
+    switch (this) {
+      case DeclarationContext.Class:
+      case DeclarationContext.ClassOrMixinOrNamedMixinApplication:
+      case DeclarationContext.Mixin:
+      case DeclarationContext.NamedMixinApplication:
+        return TypeVariableKind.classMixinOrEnum;
+      case DeclarationContext.Extension:
+      case DeclarationContext.ExtensionBody:
+        return TypeVariableKind.extension;
+      case DeclarationContext.ClassBody:
+      case DeclarationContext.ClassConstructor:
+      case DeclarationContext.ClassFactory:
+      case DeclarationContext.ClassInstanceField:
+      case DeclarationContext.ClassInstanceMethod:
+      case DeclarationContext.ClassStaticField:
+      case DeclarationContext.ClassStaticMethod:
+      case DeclarationContext.Enum:
+      case DeclarationContext.EnumBody:
+      case DeclarationContext.EnumConstructor:
+      case DeclarationContext.EnumFactory:
+      case DeclarationContext.EnumInstanceField:
+      case DeclarationContext.EnumInstanceMethod:
+      case DeclarationContext.EnumStaticField:
+      case DeclarationContext.EnumStaticMethod:
+      case DeclarationContext.ExtensionConstructor:
+      case DeclarationContext.ExtensionExternalInstanceField:
+      case DeclarationContext.ExtensionFactory:
+      case DeclarationContext.ExtensionInstanceField:
+      case DeclarationContext.ExtensionInstanceMethod:
+      case DeclarationContext.ExtensionStaticField:
+      case DeclarationContext.ExtensionStaticMethod:
+      case DeclarationContext.Library:
+      case DeclarationContext.MixinBody:
+      case DeclarationContext.MixinConstructor:
+      case DeclarationContext.MixinFactory:
+      case DeclarationContext.MixinInstanceField:
+      case DeclarationContext.MixinInstanceMethod:
+      case DeclarationContext.MixinStaticField:
+      case DeclarationContext.MixinStaticMethod:
+      case DeclarationContext.TopLevelField:
+      case DeclarationContext.TopLevelMethod:
+      case DeclarationContext.Typedef:
+        return TypeVariableKind.function;
+    }
+  }
 }
 
 class OutlineBuilder extends StackListenerImpl {
@@ -1842,7 +1890,7 @@
           // names are used to create the scope.
           List<TypeVariableBuilder> synthesizedTypeVariables = libraryBuilder
               .copyTypeVariables(extension.typeVariables!, declarationBuilder,
-                  isExtensionTypeParameter: true);
+                  kind: TypeVariableKind.extensionSynthesized);
           substitution = {};
           for (int i = 0; i < synthesizedTypeVariables.length; i++) {
             substitution[extension.typeVariables![i]] =
@@ -2904,7 +2952,8 @@
       push(name);
     } else {
       push(libraryBuilder.addTypeVariable(
-          metadata, name as String, null, charOffset, uri));
+          metadata, name as String, null, charOffset, uri,
+          kind: declarationContext.typeVariableKind));
     }
   }
 
@@ -2994,18 +3043,18 @@
                     builder.name, via.join("', '"));
             addProblem(message, builder.charOffset, builder.name.length);
             builder.bound = new NamedTypeBuilder(
-                builder.name,
-                const NullabilityBuilder.omitted(),
-                null,
-                uri,
-                builder.charOffset,
+                builder.name, const NullabilityBuilder.omitted(),
+                fileUri: uri,
+                charOffset: builder.charOffset,
                 instanceTypeVariableAccess:
                     //InstanceTypeVariableAccessState.Unexpected
                     declarationContext.instanceTypeVariableAccessState)
-              ..bind(new InvalidTypeDeclarationBuilder(
-                  builder.name,
-                  message.withLocation(
-                      uri, builder.charOffset, builder.name.length)));
+              ..bind(
+                  libraryBuilder,
+                  new InvalidTypeDeclarationBuilder(
+                      builder.name,
+                      message.withLocation(
+                          uri, builder.charOffset, builder.name.length)));
           }
         }
       }
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 9c477e0..3cfb2bf 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -213,8 +213,7 @@
     if (supertypeBuilder != null) {
       supertypeBuilder = _checkSupertype(supertypeBuilder!);
     }
-    Supertype? supertype =
-        supertypeBuilder?.buildSupertype(libraryBuilder, charOffset, fileUri);
+    Supertype? supertype = supertypeBuilder?.buildSupertype(libraryBuilder);
     if (supertype != null) {
       Class superclass = supertype.classNode;
       if (superclass.name == 'Function' &&
@@ -247,8 +246,8 @@
     if (mixedInTypeBuilder != null) {
       mixedInTypeBuilder = _checkSupertype(mixedInTypeBuilder!);
     }
-    Supertype? mixedInType = mixedInTypeBuilder?.buildMixedInType(
-        libraryBuilder, charOffset, fileUri);
+    Supertype? mixedInType =
+        mixedInTypeBuilder?.buildMixedInType(libraryBuilder);
     if (_isFunction(mixedInType, coreLibrary)) {
       libraryBuilder.addProblem(
           messageMixinFunction, charOffset, noLength, fileUri);
@@ -270,8 +269,8 @@
     if (interfaceBuilders != null) {
       for (int i = 0; i < interfaceBuilders!.length; ++i) {
         interfaceBuilders![i] = _checkSupertype(interfaceBuilders![i]);
-        Supertype? supertype = interfaceBuilders![i]
-            .buildSupertype(libraryBuilder, charOffset, fileUri);
+        Supertype? supertype =
+            interfaceBuilders![i].buildSupertype(libraryBuilder);
         if (supertype != null) {
           if (_isFunction(supertype, coreLibrary)) {
             libraryBuilder.addProblem(
@@ -823,11 +822,6 @@
         TypeAliasBuilder? aliasBuilder) {
       int nameOffset = target.nameOffset;
       int nameLength = target.nameLength;
-      // TODO(eernst): nameOffset not fully implemented; use backup.
-      if (nameOffset == -1) {
-        nameOffset = this.charOffset;
-        nameLength = noLength;
-      }
       if (aliasBuilder != null) {
         addProblem(message, nameOffset, nameLength, context: [
           messageTypedefCause.withLocation(
@@ -1216,15 +1210,15 @@
     }
     if (message != null) {
       return new NamedTypeBuilder(
-          supertype.name as String,
-          const NullabilityBuilder.omitted(),
-          /* arguments = */ null,
-          fileUri,
-          charOffset,
+          supertype.name as String, const NullabilityBuilder.omitted(),
+          fileUri: fileUri,
+          charOffset: charOffset,
           instanceTypeVariableAccess:
               InstanceTypeVariableAccessState.Unexpected)
-        ..bind(new InvalidTypeDeclarationBuilder(supertype.name as String,
-            message.withLocation(fileUri, charOffset, noLength)));
+        ..bind(
+            libraryBuilder,
+            new InvalidTypeDeclarationBuilder(supertype.name as String,
+                message.withLocation(fileUri, charOffset, noLength)));
     }
     return supertype;
   }
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index d634e7f..de8d674 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -130,7 +130,7 @@
       TypeBuilder? supertypeBuilder,
       List<TypeBuilder>? interfaceBuilders,
       List<EnumConstantInfo?>? enumConstantInfos,
-      SourceLibraryBuilder parent,
+      SourceLibraryBuilder libraryBuilder,
       List<ConstructorReferenceBuilder> constructorReferences,
       int startCharOffset,
       int charOffset,
@@ -140,16 +140,12 @@
       ConstructorScope constructorScope) {
     assert(enumConstantInfos == null || enumConstantInfos.isNotEmpty);
 
-    Uri fileUri = parent.fileUri;
+    Uri fileUri = libraryBuilder.fileUri;
 
     // TODO(ahe): These types shouldn't be looked up in scope, they come
     // directly from dart:core.
     NamedTypeBuilder intType = new NamedTypeBuilder(
-        "int",
-        const NullabilityBuilder.omitted(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
+        "int", const NullabilityBuilder.omitted(),
         instanceTypeVariableAccess:
             // If "int" resolves to an instance type variable then that we would
             // allowed (the types that we are adding are in instance context
@@ -162,25 +158,13 @@
             // variables.
             InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder stringType = new NamedTypeBuilder(
-        "String",
-        const NullabilityBuilder.omitted(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
+        "String", const NullabilityBuilder.omitted(),
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder objectType = new NamedTypeBuilder(
-        "Object",
-        const NullabilityBuilder.omitted(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
+        "Object", const NullabilityBuilder.omitted(),
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     supertypeBuilder ??= new NamedTypeBuilder(
-        "_Enum",
-        const NullabilityBuilder.omitted(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
+        "_Enum", const NullabilityBuilder.omitted(),
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     Class cls = new Class(
         name: name,
@@ -193,18 +177,11 @@
     Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
     List<SourceFieldBuilder> elementBuilders = <SourceFieldBuilder>[];
     NamedTypeBuilder selfType = new NamedTypeBuilder(
-        name,
-        const NullabilityBuilder.omitted(),
-        /* arguments = */ null,
-        /* fileUri = */ null,
-        /* charOffset = */ null,
+        name, const NullabilityBuilder.omitted(),
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
     NamedTypeBuilder listType = new NamedTypeBuilder(
-        "List",
-        const NullabilityBuilder.omitted(),
-        <TypeBuilder>[selfType],
-        /* fileUri = */ null,
-        /* charOffset = */ null,
+        "List", const NullabilityBuilder.omitted(),
+        arguments: <TypeBuilder>[selfType],
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected);
 
     // metadata class E extends _Enum {
@@ -225,7 +202,7 @@
         extensionName: null,
         libraryReference: referencesFromIndexed != null
             ? referencesFromIndexed.library.reference
-            : parent.library.reference);
+            : libraryBuilder.library.reference);
 
     NameScheme procedureNameScheme = new NameScheme(
         isInstanceMember: true,
@@ -234,7 +211,7 @@
         extensionName: null,
         libraryReference: referencesFromIndexed != null
             ? referencesFromIndexed.library.reference
-            : parent.library.reference);
+            : libraryBuilder.library.reference);
 
     Reference? constructorReference;
     Reference? tearOffReference;
@@ -265,7 +242,7 @@
       while (customValuesDeclaration?.next != null) {
         customValuesDeclaration = customValuesDeclaration?.next;
       }
-      parent.addProblem(
+      libraryBuilder.addProblem(
           messageEnumContainsValuesDeclaration,
           customValuesDeclaration!.charOffset,
           customValuesDeclaration.fullNameForErrors.length,
@@ -285,7 +262,7 @@
         while (customIndexDeclaration?.next != null) {
           customIndexDeclaration = customIndexDeclaration?.next;
         }
-        parent.addProblem(
+        libraryBuilder.addProblem(
             templateEnumContainsRestrictedInstanceDeclaration
                 .withArguments(restrictedInstanceMemberName),
             customIndexDeclaration!.charOffset,
@@ -300,7 +277,7 @@
         "values",
         constMask | staticMask | hasInitializerMask,
         /* isTopLevel = */ false,
-        parent,
+        libraryBuilder,
         charOffset,
         charOffset,
         staticFieldNameScheme,
@@ -333,11 +310,11 @@
               /* typeParameters = */ null,
               <FormalParameterBuilder>[
                 new FormalParameterBuilder(
-                    null, 0, intType, "index", parent, charOffset),
+                    null, 0, intType, "index", libraryBuilder, charOffset),
                 new FormalParameterBuilder(
-                    null, 0, stringType, "name", parent, charOffset)
+                    null, 0, stringType, "name", libraryBuilder, charOffset)
               ],
-              parent,
+              libraryBuilder,
               charOffset,
               charOffset,
               charOffset,
@@ -355,11 +332,11 @@
           member.formals!.insert(
               0,
               new FormalParameterBuilder(
-                  null, 0, stringType, "name", parent, charOffset));
+                  null, 0, stringType, "name", libraryBuilder, charOffset));
           member.formals!.insert(
               0,
               new FormalParameterBuilder(
-                  null, 0, intType, "index", parent, charOffset));
+                  null, 0, intType, "index", libraryBuilder, charOffset));
         }
       });
     }
@@ -373,7 +350,7 @@
           /* typeVariables = */ null,
           /* formals = */ null,
           ProcedureKind.Method,
-          parent,
+          libraryBuilder,
           charOffset,
           charOffset,
           charOffset,
@@ -425,23 +402,27 @@
                   templateDuplicatedDeclarationSyntheticCause
                       .withArguments(name)
                       .withLocation(
-                          parent.fileUri, charOffset, className.length)
+                          libraryBuilder.fileUri, charOffset, className.length)
                 ]
               : <LocatedMessage>[
                   templateDuplicatedDeclarationCause
                       .withArguments(name)
-                      .withLocation(parent.fileUri, existingOffset, name.length)
+                      .withLocation(
+                          libraryBuilder.fileUri, existingOffset, name.length)
                 ];
-          parent.addProblem(templateDuplicatedDeclaration.withArguments(name),
-              duplicateOffset, name.length, parent.fileUri,
+          libraryBuilder.addProblem(
+              templateDuplicatedDeclaration.withArguments(name),
+              duplicateOffset,
+              name.length,
+              libraryBuilder.fileUri,
               context: context);
           enumConstantInfos[i] = null;
         } else if (name == className) {
-          parent.addProblem(
+          libraryBuilder.addProblem(
               templateEnumConstantSameNameAsEnclosing.withArguments(name),
               enumConstantInfo.charOffset,
               name.length,
-              parent.fileUri);
+              libraryBuilder.fileUri);
         }
         Reference? fieldReference;
         Reference? getterReference;
@@ -460,7 +441,7 @@
             name,
             constMask | staticMask | hasInitializerMask,
             /* isTopLevel = */ false,
-            parent,
+            libraryBuilder,
             enumConstantInfo.charOffset,
             enumConstantInfo.charOffset,
             staticFieldNameScheme,
@@ -469,7 +450,7 @@
             fieldSetterReference: setterReference);
         fieldBuilder.fieldType = new ImplicitFieldType(
             fieldBuilder, enumConstantInfo.argumentsBeginToken);
-        parent.registerImplicitlyTypedField(fieldBuilder);
+        libraryBuilder.registerImplicitlyTypedField(fieldBuilder);
         members[name] = fieldBuilder..next = existing;
         elementBuilders.add(fieldBuilder);
       }
@@ -496,7 +477,7 @@
         objectType,
         stringType,
         selfType,
-        parent,
+        libraryBuilder,
         constructorReferences,
         startCharOffsetComputed,
         charOffset,
@@ -514,12 +495,12 @@
 
     members.forEach(setParent);
     constructorScope.local.forEach(setParent);
-    selfType.bind(enumBuilder);
+    selfType.bind(libraryBuilder, enumBuilder);
 
     if (constructorScope.local.isNotEmpty) {
       for (MemberBuilder constructorBuilder in constructorScope.local.values) {
         if (!constructorBuilder.isFactory && !constructorBuilder.isConst) {
-          parent.addProblem(messageEnumNonConstConstructor,
+          libraryBuilder.addProblem(messageEnumNonConstConstructor,
               constructorBuilder.charOffset, noLength, fileUri);
         }
       }
diff --git a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
index 409a95f..882b9f9 100644
--- a/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_extension_builder.dart
@@ -321,14 +321,10 @@
       required this.hiddenOperators});
 
   void buildAndStoreTypes(Extension extension, LibraryBuilder libraryBuilder) {
-    List<Supertype> builtShownSupertypes = shownSupertypes
-        .map(
-            (t) => t.buildSupertype(libraryBuilder, t.charOffset!, t.fileUri!)!)
-        .toList();
-    List<Supertype> builtHiddenSupertypes = hiddenSupertypes
-        .map(
-            (t) => t.buildSupertype(libraryBuilder, t.charOffset!, t.fileUri!)!)
-        .toList();
+    List<Supertype> builtShownSupertypes =
+        shownSupertypes.map((t) => t.buildSupertype(libraryBuilder)!).toList();
+    List<Supertype> builtHiddenSupertypes =
+        hiddenSupertypes.map((t) => t.buildSupertype(libraryBuilder)!).toList();
     ExtensionTypeShowHideClause showHideClause =
         extension.showHideClause ?? new ExtensionTypeShowHideClause();
     showHideClause.shownSupertypes.addAll(builtShownSupertypes);
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index b11228e..9b796de 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -1517,7 +1517,6 @@
     for (NamedTypeBuilder namedType in unresolvedNamedTypes) {
       namedType.resolveIn(
           scope, namedType.charOffset!, namedType.fileUri!, this);
-      namedType.check(this, namedType.charOffset!, namedType.fileUri!);
     }
     unresolvedNamedTypes.clear();
     return typeCount;
@@ -1539,19 +1538,15 @@
         Class cls = declaration.cls;
         if (cls != objectClass) {
           cls.supertype ??= objectClass.asRawSupertype;
-          declaration.supertypeBuilder ??= new NamedTypeBuilder(
-              "Object",
-              const NullabilityBuilder.omitted(),
-              /* arguments = */ null,
-              /* fileUri = */ null,
-              /* charOffset = */ null,
-              instanceTypeVariableAccess:
-                  InstanceTypeVariableAccessState.Unexpected)
-            ..bind(objectClassBuilder);
+          declaration.supertypeBuilder ??=
+              new NamedTypeBuilder.fromTypeDeclarationBuilder(
+                  objectClassBuilder, const NullabilityBuilder.omitted(),
+                  instanceTypeVariableAccess:
+                      InstanceTypeVariableAccessState.Unexpected);
         }
         if (declaration.isMixinApplication) {
-          cls.mixedInType = declaration.mixedInTypeBuilder!.buildMixedInType(
-              this, declaration.charOffset, declaration.fileUri);
+          cls.mixedInType =
+              declaration.mixedInTypeBuilder!.buildMixedInType(this);
         }
       }
     }
@@ -1661,11 +1656,17 @@
     //addBuilder("Null", new NullTypeBuilder(const NullType(), this, -1), -1);
   }
 
-  TypeBuilder addNamedType(Object name, NullabilityBuilder nullabilityBuilder,
-      List<TypeBuilder>? arguments, int charOffset,
+  NamedTypeBuilder addNamedType(
+      Object name,
+      NullabilityBuilder nullabilityBuilder,
+      List<TypeBuilder>? arguments,
+      int charOffset,
       {required InstanceTypeVariableAccessState instanceTypeVariableAccess}) {
     return registerUnresolvedNamedType(new NamedTypeBuilder(
-        name, nullabilityBuilder, arguments, fileUri, charOffset,
+        name, nullabilityBuilder,
+        arguments: arguments,
+        fileUri: fileUri,
+        charOffset: charOffset,
         instanceTypeVariableAccess: instanceTypeVariableAccess));
   }
 
@@ -1679,7 +1680,7 @@
     return addNamedType(
         "void", const NullabilityBuilder.inherent(), null, charOffset,
         instanceTypeVariableAccess: InstanceTypeVariableAccessState.Unexpected)
-      ..bind(
+      ..bind(this,
           new VoidTypeDeclarationBuilder(const VoidType(), this, charOffset));
   }
 
@@ -1957,7 +1958,7 @@
     for (TypeVariableBuilder tv in typeVariables) {
       TypeVariableBuilder? existing = typeVariablesByName[tv.name];
       if (existing != null) {
-        if (existing.isExtensionTypeParameter) {
+        if (existing.kind == TypeVariableKind.extensionSynthesized) {
           // The type parameter from the extension is shadowed by the type
           // parameter from the member. Rename the shadowed type parameter.
           existing.parameter.name = '#${existing.name}';
@@ -2316,7 +2317,8 @@
                 "mixin application");
 
             applicationTypeVariables = copyTypeVariables(
-                typeVariables!, currentTypeParameterScopeBuilder);
+                typeVariables!, currentTypeParameterScopeBuilder,
+                kind: TypeVariableKind.extensionSynthesized);
 
             List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
             if (supertype is NamedTypeBuilder && supertype.arguments != null) {
@@ -2344,16 +2346,18 @@
 
             applicationTypeArguments = <TypeBuilder>[];
             for (TypeVariableBuilder typeVariable in typeVariables) {
-              applicationTypeArguments.add(addNamedType(typeVariable.name,
-                  const NullabilityBuilder.omitted(), null, charOffset,
-                  instanceTypeVariableAccess:
-                      InstanceTypeVariableAccessState.Allowed)
-                ..bind(
-                    // The type variable types passed as arguments to the
-                    // generic class representing the anonymous mixin
-                    // application should refer back to the type variables of
-                    // the class that extend the anonymous mixin application.
-                    typeVariable));
+              applicationTypeArguments.add(
+                  new NamedTypeBuilder.fromTypeDeclarationBuilder(
+                      // The type variable types passed as arguments to the
+                      // generic class representing the anonymous mixin
+                      // application should refer back to the type variables of
+                      // the class that extend the anonymous mixin application.
+                      typeVariable,
+                      const NullabilityBuilder.omitted(),
+                      fileUri: fileUri,
+                      charOffset: charOffset,
+                      instanceTypeVariableAccess:
+                          InstanceTypeVariableAccessState.Allowed));
             }
           }
         }
@@ -2750,7 +2754,7 @@
       int charEndOffset,
       String? nativeMethodName,
       AsyncMarker asyncModifier) {
-    TypeBuilder returnType = addNamedType(
+    NamedTypeBuilder returnType = addNamedType(
         currentTypeParameterScopeBuilder.parent!.name,
         const NullabilityBuilder.omitted(),
         <TypeBuilder>[],
@@ -2760,10 +2764,12 @@
         TypeParameterScopeKind.extensionDeclaration) {
       // Make the synthesized return type invalid for extensions.
       String name = currentTypeParameterScopeBuilder.parent!.name;
-      returnType.bind(new InvalidTypeDeclarationBuilder(
-          name,
-          messageExtensionDeclaresConstructor.withLocation(
-              fileUri, charOffset, name.length)));
+      returnType.bind(
+          this,
+          new InvalidTypeDeclarationBuilder(
+              name,
+              messageExtensionDeclaresConstructor.withLocation(
+                  fileUri, charOffset, name.length)));
     }
     // Nested declaration began in `OutlineBuilder.beginFactoryMethod`.
     TypeParameterScopeBuilder factoryDeclaration = endNestedDeclaration(
@@ -2811,7 +2817,8 @@
           copyTypeVariables(
               currentTypeParameterScopeBuilder.typeVariables ??
                   const <TypeVariableBuilder>[],
-              factoryDeclaration),
+              factoryDeclaration,
+              kind: TypeVariableKind.function),
           formals,
           this,
           startCharOffset,
@@ -2832,7 +2839,8 @@
           copyTypeVariables(
               currentTypeParameterScopeBuilder.typeVariables ??
                   const <TypeVariableBuilder>[],
-              factoryDeclaration),
+              factoryDeclaration,
+              kind: TypeVariableKind.function),
           formals,
           this,
           startCharOffset,
@@ -3030,10 +3038,11 @@
   }
 
   TypeVariableBuilder addTypeVariable(List<MetadataBuilder>? metadata,
-      String name, TypeBuilder? bound, int charOffset, Uri fileUri) {
+      String name, TypeBuilder? bound, int charOffset, Uri fileUri,
+      {required TypeVariableKind kind}) {
     TypeVariableBuilder builder = new TypeVariableBuilder(
         name, this, charOffset, fileUri,
-        bound: bound, metadata: metadata);
+        bound: bound, metadata: metadata, kind: kind);
 
     unboundTypeVariables.add(builder);
     return builder;
@@ -3402,14 +3411,14 @@
   /// [TypeParameter] are prefix with '#' to indicate that their synthesized.
   List<TypeVariableBuilder> copyTypeVariables(
       List<TypeVariableBuilder> original, TypeParameterScopeBuilder declaration,
-      {bool isExtensionTypeParameter: false}) {
+      {required TypeVariableKind kind}) {
     List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
     List<TypeVariableBuilder> copy = <TypeVariableBuilder>[];
     for (TypeVariableBuilder variable in original) {
       TypeVariableBuilder newVariable = new TypeVariableBuilder(
           variable.name, this, variable.charOffset, variable.fileUri,
           bound: variable.bound?.clone(newTypes, this, declaration),
-          isExtensionTypeParameter: isExtensionTypeParameter,
+          kind: kind,
           variableVariance:
               variable.parameter.isLegacyCovariant ? null : variable.variance);
       copy.add(newVariable);
@@ -5234,11 +5243,14 @@
             namedTypeBuilder.charOffset!,
             nameOrQualified.endCharOffset - namedTypeBuilder.charOffset!,
             namedTypeBuilder.fileUri!);
-        namedTypeBuilder.bind(namedTypeBuilder
-            .buildInvalidTypeDeclarationBuilder(message.withLocation(
-                namedTypeBuilder.fileUri!,
-                namedTypeBuilder.charOffset!,
-                nameOrQualified.endCharOffset - namedTypeBuilder.charOffset!)));
+        namedTypeBuilder.bind(
+            library,
+            namedTypeBuilder.buildInvalidTypeDeclarationBuilder(
+                message.withLocation(
+                    namedTypeBuilder.fileUri!,
+                    namedTypeBuilder.charOffset!,
+                    nameOrQualified.endCharOffset -
+                        namedTypeBuilder.charOffset!)));
       } else {
         scope ??= toScope(null).withTypeVariables(typeVariables);
         namedTypeBuilder.resolveIn(scope, namedTypeBuilder.charOffset!,
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index e0e89e3..084733a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -2521,9 +2521,11 @@
     return library.lookupLocalMember(cls.name, required: true) as ClassBuilder;
   }
 
+  late TypeBuilderComputer _typeBuilderComputer = new TypeBuilderComputer(this);
+
   @override
   TypeBuilder computeTypeBuilder(DartType type) {
-    return type.accept(new TypeBuilderComputer(this));
+    return type.accept(_typeBuilderComputer);
   }
 
   BodyBuilder createBodyBuilderForField(
diff --git a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
index 39cce6d..638253e 100644
--- a/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_type_alias_builder.dart
@@ -157,8 +157,17 @@
     TypeBuilder? type = this.type;
     // ignore: unnecessary_null_comparison
     if (type != null) {
-      DartType builtType = type.build(libraryBuilder,
-          origin: thisTypedefType(typedef, libraryBuilder));
+      DartType builtType = type.build(libraryBuilder);
+      if (builtType is FunctionType) {
+        // Set the `typedefType` if it hasn't already been set. It can already
+        // be set if this type alias is an alias of another typedef, in which
+        // we use the existing value. For instance
+        //
+        //    typedef void F(); // typedefType will be set to `F`.
+        //    typedef G = F; // The typedefType has already been set to `F`.
+        //
+        builtType.typedefType ??= thisTypedefType(typedef, libraryBuilder);
+      }
       // ignore: unnecessary_null_comparison
       if (builtType != null) {
         if (typeVariables != null) {
diff --git a/pkg/front_end/test/extensions/data/use_as_type.dart b/pkg/front_end/test/extensions/data/use_as_type.dart
index fd5e3dd..791e6cc 100644
--- a/pkg/front_end/test/extensions/data/use_as_type.dart
+++ b/pkg/front_end/test/extensions/data/use_as_type.dart
@@ -34,11 +34,11 @@
 extension B2<T> on B1<T> {}
 
 main() {
-  /*error: errors=['A2' isn't a type.]*/
+  /*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/
   A2 var1;
-  /*error: errors=['B2' isn't a type.]*/
+  /*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/
   B2<A1> var2;
-  B1</*error: errors=['A2' isn't a type.]*/A2> var3;
+  B1</*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/A2> var3;
 }
 
 /*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/
@@ -46,7 +46,7 @@
 
 // TODO(johnniwinther): We should report an error on the number of type
 // arguments here.
-/*error: errors=[Expected 0 type arguments.,This requires the 'extension-types' language feature to be enabled.]*/
+/*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/
 B2<A1> method2() => null;
 
 B1</*error: errors=[This requires the 'extension-types' language feature to be enabled.]*/A2> method3() => null;
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect
index 7f95ca4..ce61661 100644
--- a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.strong.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
-//   static A<T>? method1(A<T> arg) {
-//                          ^
-//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
 //   static A<T>? method1(A<T> arg) {
 //            ^
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method2(A<A<T>> arg) {
-//                               ^
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
 //
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method2(A<A<T>> arg) {
 //              ^
 //
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:9:7: Error: Type variables can't be used in static members.
 //     A<T>? local;
 //       ^
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect
index 7f95ca4..ce61661 100644
--- a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
-//   static A<T>? method1(A<T> arg) {
-//                          ^
-//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
 //   static A<T>? method1(A<T> arg) {
 //            ^
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method2(A<A<T>> arg) {
-//                               ^
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
 //
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method2(A<A<T>> arg) {
 //              ^
 //
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:9:7: Error: Type variables can't be used in static members.
 //     A<T>? local;
 //       ^
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect
index 7f95ca4..ce61661 100644
--- a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.modular.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
-//   static A<T>? method1(A<T> arg) {
-//                          ^
-//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
 //   static A<T>? method1(A<T> arg) {
 //            ^
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method2(A<A<T>> arg) {
-//                               ^
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
 //
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method2(A<A<T>> arg) {
 //              ^
 //
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:9:7: Error: Type variables can't be used in static members.
 //     A<T>? local;
 //       ^
diff --git a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect
index 9dda330..86a9155 100644
--- a/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart.weak.outline.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
-//   static A<T>? method1(A<T> arg) {
-//                          ^
-//
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:12: Error: Type variables can't be used in static members.
 //   static A<T>? method1(A<T> arg) {
 //            ^
 //
-// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method2(A<A<T>> arg) {
-//                               ^
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:8:26: Error: Type variables can't be used in static members.
+//   static A<T>? method1(A<T> arg) {
+//                          ^
 //
 // pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:14: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method2(A<A<T>> arg) {
 //              ^
 //
+// pkg/front_end/testcases/extension_types/type_variable_in_static_context.dart:11:31: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method2(A<A<T>> arg) {
+//                               ^
+//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart
new file mode 100644
index 0000000..e12014a
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2019, 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.
+
+extension E1<T, T> on int {}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.textual_outline.expect b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.textual_outline.expect
new file mode 100644
index 0000000..5413d5e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+extension E1<T, T> on int {}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..5413d5e
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.textual_outline_modelled.expect
@@ -0,0 +1,3 @@
+extension E1<T, T> on int {}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.expect b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.expect
new file mode 100644
index 0000000..35621d1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:17: Error: A type variable can't have the same name as another.
+// extension E1<T, T> on int {}
+//                 ^
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:14: Context: The other type variable named 'T'.
+// extension E1<T, T> on int {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1<T extends core::Object? = dynamic, T extends core::Object? = dynamic> on core::int {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.modular.expect b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.modular.expect
new file mode 100644
index 0000000..35621d1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.modular.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:17: Error: A type variable can't have the same name as another.
+// extension E1<T, T> on int {}
+//                 ^
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:14: Context: The other type variable named 'T'.
+// extension E1<T, T> on int {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1<T extends core::Object? = dynamic, T extends core::Object? = dynamic> on core::int {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.outline.expect b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.outline.expect
new file mode 100644
index 0000000..6d9498c988
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:17: Error: A type variable can't have the same name as another.
+// extension E1<T, T> on int {}
+//                 ^
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:14: Context: The other type variable named 'T'.
+// extension E1<T, T> on int {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1<T extends core::Object? = dynamic, T extends core::Object? = dynamic> on core::int {
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.transformed.expect
new file mode 100644
index 0000000..35621d1
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/duplicate_type_variables.dart.weak.transformed.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:17: Error: A type variable can't have the same name as another.
+// extension E1<T, T> on int {}
+//                 ^
+// pkg/front_end/testcases/extensions/duplicate_type_variables.dart:5:14: Context: The other type variable named 'T'.
+// extension E1<T, T> on int {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+extension E1<T extends core::Object? = dynamic, T extends core::Object? = dynamic> on core::int {
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
index 35d93a3..fd29488 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.expect
@@ -53,15 +53,15 @@
 //         field11 = o as Class<T>,
 //                              ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:40:20: Error: Type variables can't be used as constants.
 //     const local1 = T;
 //                    ^
@@ -236,15 +236,15 @@
 //         field7 = <T, T>{},
 //                      ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:37:20: Error: Type variables can't be used as constants.
 //     const local1 = T;
 //                    ^
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect
index 35d93a3..fd29488 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.modular.expect
@@ -53,15 +53,15 @@
 //         field11 = o as Class<T>,
 //                              ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:40:20: Error: Type variables can't be used as constants.
 //     const local1 = T;
 //                    ^
@@ -236,15 +236,15 @@
 //         field7 = <T, T>{},
 //                      ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:37:20: Error: Type variables can't be used as constants.
 //     const local1 = T;
 //                    ^
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.outline.expect
index 559f6ba..741a4d8 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.outline.expect
@@ -53,15 +53,15 @@
 //         field11 = o as Class<T>,
 //                              ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 import self as self;
 import "dart:core" as core;
 import "dart:collection" as col;
@@ -141,15 +141,15 @@
 //         field7 = <T, T>{},
 //                      ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 import self as self2;
 import "dart:core" as core;
 import "dart:collection" as col;
diff --git a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
index 35d93a3..fd29488 100644
--- a/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/potentially_constant_type.dart.weak.transformed.expect
@@ -53,15 +53,15 @@
 //         field11 = o as Class<T>,
 //                              ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type.dart:34:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 // pkg/front_end/testcases/general/constants/potentially_constant_type.dart:40:20: Error: Type variables can't be used as constants.
 //     const local1 = T;
 //                    ^
@@ -236,15 +236,15 @@
 //         field7 = <T, T>{},
 //                      ^
 //
-// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
-//         field15 = <Class<T>>[];
-//                          ^
-//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:29: Error: Constant expression expected.
 // Try inserting 'const'.
 //         field15 = <Class<T>>[];
 //                             ^
 //
+// pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:31:26: Error: Type variables can't be used as constants.
+//         field15 = <Class<T>>[];
+//                          ^
+//
 // pkg/front_end/testcases/general/constants/potentially_constant_type_lib1.dart:37:20: Error: Type variables can't be used as constants.
 //     const local1 = T;
 //                    ^
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.expect
index 8044a08..4f9249f 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart:27:7: Error: Expected 2 type arguments.
 // const Map<bool> MapWithUnevaluated = {
-//       ^
+//       ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect
index 8044a08..4f9249f 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart:27:7: Error: Expected 2 type arguments.
 // const Map<bool> MapWithUnevaluated = {
-//       ^
+//       ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect
index d08ca5a..620b538 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart:27:7: Error: Expected 2 type arguments.
 // const Map<bool> MapWithUnevaluated = {
-//       ^
+//       ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.transformed.expect
index c7e9a22..68271db 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_collections.dart:27:7: Error: Expected 2 type arguments.
 // const Map<bool> MapWithUnevaluated = {
-//       ^
+//       ^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.expect
index 679fe85..0e4161b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.expect
@@ -36,8 +36,4 @@
 // n<S e(
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:1: Error: Expected 0 type arguments.
-// n<S e(
-// ^
-//
 import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect
index 679fe85..0e4161b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.modular.expect
@@ -36,8 +36,4 @@
 // n<S e(
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:1: Error: Expected 0 type arguments.
-// n<S e(
-// ^
-//
 import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.outline.expect
index 679fe85..0e4161b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.outline.expect
@@ -36,8 +36,4 @@
 // n<S e(
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:1: Error: Expected 0 type arguments.
-// n<S e(
-// ^
-//
 import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.transformed.expect
index 679fe85..0e4161b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart.weak.transformed.expect
@@ -36,8 +36,4 @@
 // n<S e(
 // ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39024.crash_dart:1:1: Error: Expected 0 type arguments.
-// n<S e(
-// ^
-//
 import self as self;
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
index e1e7c23..1a6da32 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.expect
@@ -36,10 +36,6 @@
 // () async => a b < c $? >
 //               ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Expected 0 type arguments.
-// () async => a b < c $? >
-//               ^
-//
 // pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Expected ';' after this.
 // () async => a b < c $? >
 //             ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect
index e1e7c23..1a6da32 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.modular.expect
@@ -36,10 +36,6 @@
 // () async => a b < c $? >
 //               ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Expected 0 type arguments.
-// () async => a b < c $? >
-//               ^
-//
 // pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Expected ';' after this.
 // () async => a b < c $? >
 //             ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
index 468caf0..a235882 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.outline.expect
@@ -36,10 +36,6 @@
 // () async => a b < c $? >
 //               ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Expected 0 type arguments.
-// () async => a b < c $? >
-//               ^
-//
 import self as self;
 
 static method async() → dynamic
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
index e1e7c23..1a6da32 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart.weak.transformed.expect
@@ -36,10 +36,6 @@
 // () async => a b < c $? >
 //               ^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:15: Error: Expected 0 type arguments.
-// () async => a b < c $? >
-//               ^
-//
 // pkg/front_end/testcases/general/error_recovery/issue_39202.crash_dart:1:13: Error: Expected ';' after this.
 // () async => a b < c $? >
 //             ^
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.expect
index 25b9642..e96c8c7 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect
index 25b9642..e96c8c7 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.outline.expect
index a025710..efc1b8e 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.transformed.expect
index 25b9642..e96c8c7 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_02.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.expect
index 4340016..e7b316b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:1:1: Error: Expected 0 type arguments.
 // int<int> f() {}
-// ^
+// ^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect
index 4340016..e7b316b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:1:1: Error: Expected 0 type arguments.
 // int<int> f() {}
-// ^
+// ^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.outline.expect
index 8548c0d..bc93b44 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:1:1: Error: Expected 0 type arguments.
 // int<int> f() {}
-// ^
+// ^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.transformed.expect
index 4340016..e7b316b 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/error_recovery/issue_39958_03.dart:1:1: Error: Expected 0 type arguments.
 // int<int> f() {}
-// ^
+// ^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.expect
index 1d42619..94d89e8 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.expect
@@ -6,10 +6,6 @@
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Expected 0 type arguments.
-// Foo<int> f() {}
-// ^
-//
 import self as self;
 
 static method f() → invalid-type {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect
index 1d42619..94d89e8 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.modular.expect
@@ -6,10 +6,6 @@
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Expected 0 type arguments.
-// Foo<int> f() {}
-// ^
-//
 import self as self;
 
 static method f() → invalid-type {}
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.outline.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.outline.expect
index cca6d79..2a583d8 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.outline.expect
@@ -6,10 +6,6 @@
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Expected 0 type arguments.
-// Foo<int> f() {}
-// ^
-//
 import self as self;
 
 static method f() → invalid-type
diff --git a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.transformed.expect b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.transformed.expect
index 1d42619..94d89e8 100644
--- a/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart.weak.transformed.expect
@@ -6,10 +6,6 @@
 // Foo<int> f() {}
 // ^^^
 //
-// pkg/front_end/testcases/general/error_recovery/issue_39958_04.dart:1:1: Error: Expected 0 type arguments.
-// Foo<int> f() {}
-// ^
-//
 import self as self;
 
 static method f() → invalid-type {}
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.expect
index 932b16b..a167e00 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.expect
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.expect
@@ -6,13 +6,13 @@
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
 //       ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:7: Error: The type variable 'S' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:47: Error: The type variable 'S' can't be used as supertype.
 // class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
-//       ^
+//                                               ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:7: Error: The type variable 'M' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:61: Error: The type variable 'M' can't be used as supertype.
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
-//       ^
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect
index 932b16b..a167e00 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.modular.expect
@@ -6,13 +6,13 @@
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
 //       ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:7: Error: The type variable 'S' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:47: Error: The type variable 'S' can't be used as supertype.
 // class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
-//       ^
+//                                               ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:7: Error: The type variable 'M' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:61: Error: The type variable 'M' can't be used as supertype.
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
-//       ^
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.outline.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.outline.expect
index c883ec7..e70af7c 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.outline.expect
@@ -6,13 +6,13 @@
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
 //       ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:7: Error: The type variable 'S' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:47: Error: The type variable 'S' can't be used as supertype.
 // class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
-//       ^
+//                                               ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:7: Error: The type variable 'M' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:61: Error: The type variable 'M' can't be used as supertype.
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
-//       ^
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.transformed.expect
index b205d46..7710aee 100644
--- a/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/extend_with_type_variable.dart.weak.transformed.expect
@@ -6,13 +6,13 @@
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
 //       ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:7: Error: The type variable 'S' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:11:47: Error: The type variable 'S' can't be used as supertype.
 // class Class1<T, S extends SuperClass> extends S with Mixin<T> {}
-//       ^
+//                                               ^
 //
-// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:7: Error: The type variable 'M' can't be used as supertype.
+// pkg/front_end/testcases/general/extend_with_type_variable.dart:13:61: Error: The type variable 'M' can't be used as supertype.
 // class Class2<T, M extends Mixin<T>> extends SuperClass with M {}
-//       ^
+//                                                             ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect
index d038898..2777d14 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect
@@ -7,10 +7,6 @@
 // test(E e) {} // Error.
 //      ^
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
-// test(E e) {} // Error.
-//      ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
index d038898..2777d14 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
@@ -7,10 +7,6 @@
 // test(E e) {} // Error.
 //      ^
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
-// test(E e) {} // Error.
-//      ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect
index d038898..2777d14 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect
@@ -7,10 +7,6 @@
 // test(E e) {} // Error.
 //      ^
 //
-// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: 'E' isn't a type.
-// test(E e) {} // Error.
-//      ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.expect b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.expect
index a03c56f..3048e79 100644
--- a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue45700.crash_dart:5:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/general/issue45700.crash_dart:5:12: Error: Can't use a function type as supertype.
 // mixin M on Function() {}
-//       ^
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect
index a03c56f..3048e79 100644
--- a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.modular.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue45700.crash_dart:5:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/general/issue45700.crash_dart:5:12: Error: Can't use a function type as supertype.
 // mixin M on Function() {}
-//       ^
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.outline.expect b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.outline.expect
index 2c993ea..e7d0e03 100644
--- a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.outline.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue45700.crash_dart:5:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/general/issue45700.crash_dart:5:12: Error: Can't use a function type as supertype.
 // mixin M on Function() {}
-//       ^
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.transformed.expect
index a03c56f..3048e79 100644
--- a/pkg/front_end/testcases/general/issue45700.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue45700.crash_dart.weak.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue45700.crash_dart:5:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/general/issue45700.crash_dart:5:12: Error: Can't use a function type as supertype.
 // mixin M on Function() {}
-//       ^
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/issue47728_4.dart.weak.expect b/pkg/front_end/testcases/general/issue47728_4.dart.weak.expect
index b242e08..2a79c0b 100644
--- a/pkg/front_end/testcases/general/issue47728_4.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue47728_4.dart.weak.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue47728_4.dart:9:7: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/general/issue47728_4.dart:9:11: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
 // class C = A with B;
-//       ^
+//           ^
 // pkg/front_end/testcases/general/issue47728_4.dart:5:9: Context: The issue arises via this type alias.
 // typedef A = Function()?;
 //         ^
diff --git a/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect
index b242e08..2a79c0b 100644
--- a/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/issue47728_4.dart.weak.modular.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue47728_4.dart:9:7: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/general/issue47728_4.dart:9:11: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
 // class C = A with B;
-//       ^
+//           ^
 // pkg/front_end/testcases/general/issue47728_4.dart:5:9: Context: The issue arises via this type alias.
 // typedef A = Function()?;
 //         ^
diff --git a/pkg/front_end/testcases/general/issue47728_4.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue47728_4.dart.weak.outline.expect
index bcc7a6f..9e97c40 100644
--- a/pkg/front_end/testcases/general/issue47728_4.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/issue47728_4.dart.weak.outline.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue47728_4.dart:9:7: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/general/issue47728_4.dart:9:11: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
 // class C = A with B;
-//       ^
+//           ^
 // pkg/front_end/testcases/general/issue47728_4.dart:5:9: Context: The issue arises via this type alias.
 // typedef A = Function()?;
 //         ^
diff --git a/pkg/front_end/testcases/general/issue47728_4.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue47728_4.dart.weak.transformed.expect
index a92eb47..3d2bbb7 100644
--- a/pkg/front_end/testcases/general/issue47728_4.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue47728_4.dart.weak.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/issue47728_4.dart:9:7: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/general/issue47728_4.dart:9:11: Error: The type 'A' which is an alias of 'dynamic Function()?' can't be used as supertype because it is nullable.
 // class C = A with B;
-//       ^
+//           ^
 // pkg/front_end/testcases/general/issue47728_4.dart:5:9: Context: The issue arises via this type alias.
 // typedef A = Function()?;
 //         ^
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.expect b/pkg/front_end/testcases/general/qualified.dart.weak.expect
index 31a30f6..be3713b 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.expect
@@ -17,9 +17,9 @@
 //   lib.Missing method() {}
 //   ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
+// pkg/front_end/testcases/general/qualified.dart:18:32: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
 // class IllegalSupertype extends lib.VoidFunction {}
-//       ^
+//                                ^
 // pkg/front_end/testcases/general/qualified_lib.dart:27:9: Context: The issue arises via this type alias.
 // typedef VoidFunction = void Function();
 //         ^
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect b/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
index 31a30f6..be3713b 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.modular.expect
@@ -17,9 +17,9 @@
 //   lib.Missing method() {}
 //   ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
+// pkg/front_end/testcases/general/qualified.dart:18:32: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
 // class IllegalSupertype extends lib.VoidFunction {}
-//       ^
+//                                ^
 // pkg/front_end/testcases/general/qualified_lib.dart:27:9: Context: The issue arises via this type alias.
 // typedef VoidFunction = void Function();
 //         ^
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
index a9d4036..822ff06 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.outline.expect
@@ -17,9 +17,9 @@
 //   lib.Missing method() {}
 //   ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
+// pkg/front_end/testcases/general/qualified.dart:18:32: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
 // class IllegalSupertype extends lib.VoidFunction {}
-//       ^
+//                                ^
 // pkg/front_end/testcases/general/qualified_lib.dart:27:9: Context: The issue arises via this type alias.
 // typedef VoidFunction = void Function();
 //         ^
diff --git a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
index 04ffa8c..74e7869 100644
--- a/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/qualified.dart.weak.transformed.expect
@@ -17,9 +17,9 @@
 //   lib.Missing method() {}
 //   ^^^^^^^^^^^
 //
-// pkg/front_end/testcases/general/qualified.dart:18:7: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
+// pkg/front_end/testcases/general/qualified.dart:18:32: Error: The type 'lib.VoidFunction' which is an alias of 'void Function()' can't be used as supertype.
 // class IllegalSupertype extends lib.VoidFunction {}
-//       ^
+//                                ^
 // pkg/front_end/testcases/general/qualified_lib.dart:27:9: Context: The issue arises via this type alias.
 // typedef VoidFunction = void Function();
 //         ^
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.expect
index 45cdf4b..97abf4a 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect
index 45cdf4b..97abf4a 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.modular.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.outline.expect
index 092d23a..0631065 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.outline.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.transformed.expect
index 45cdf4b..97abf4a 100644
--- a/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_parameters_on_dynamic.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 //
 // pkg/front_end/testcases/general/type_parameters_on_dynamic.dart:1:1: Error: Expected 0 type arguments.
 // dynamic<int> f() {}
-// ^
+// ^^^^^^^
 //
 import self as self;
 
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.expect
index 598ef86..f745338 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:5:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class A<T> extends T {}
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:7:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:7:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class B<T> extends T {
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:11:7: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:11:20: Error: The type variable 'T' can't be used as supertype.
 // class C<T> extends T {}
-//       ^
+//                    ^
 //
 // pkg/front_end/testcases/general/type_variable_as_super.dart:14:7: Error: The class 'A' is abstract and can't be instantiated.
 //   new A();
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect
index 598ef86..f745338 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.modular.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:5:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class A<T> extends T {}
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:7:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:7:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class B<T> extends T {
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:11:7: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:11:20: Error: The type variable 'T' can't be used as supertype.
 // class C<T> extends T {}
-//       ^
+//                    ^
 //
 // pkg/front_end/testcases/general/type_variable_as_super.dart:14:7: Error: The class 'A' is abstract and can't be instantiated.
 //   new A();
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.outline.expect
index 66c885f..6077ec0 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.outline.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:5:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class A<T> extends T {}
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:7:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:7:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class B<T> extends T {
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:11:7: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:11:20: Error: The type variable 'T' can't be used as supertype.
 // class C<T> extends T {}
-//       ^
+//                    ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.transformed.expect
index 598ef86..f745338 100644
--- a/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_as_super.dart.weak.transformed.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:5:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:5:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class A<T> extends T {}
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:7:16: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:7:29: Error: The type variable 'T' can't be used as supertype.
 // abstract class B<T> extends T {
-//                ^
+//                             ^
 //
-// pkg/front_end/testcases/general/type_variable_as_super.dart:11:7: Error: The type variable 'T' can't be used as supertype.
+// pkg/front_end/testcases/general/type_variable_as_super.dart:11:20: Error: The type variable 'T' can't be used as supertype.
 // class C<T> extends T {}
-//       ^
+//                    ^
 //
 // pkg/front_end/testcases/general/type_variable_as_super.dart:14:7: Error: The class 'A' is abstract and can't be instantiated.
 //   new A();
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
index 31bd8fe..9952b84 100644
--- a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.expect
@@ -2,61 +2,114 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   Extension(T t);
-//   ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   factory Extension.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
-// Try removing the field declaration or making it a static field
-//   T field1;
-//     ^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
-//   Mixin(T t);
-//   ^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
-//   factory Mixin.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
-//   factory Extension.fact(T t) => null;
-//           ^
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
 //
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
 //   static T? method0<S extends T>(T arg) {
 //                               ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
 //   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
 //                                            ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
 //   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
 //                                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
 //   static A<T>? method3<S extends A<T>>(A<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
 //   static B<T>? method5<S extends B<T>>(B<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
 //   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
 //   @Class<void Function<S extends T>()>()
 //                                  ^
@@ -73,102 +126,85 @@
 //   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
 //                                                                                                                ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                                                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                                                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//              ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//              ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
 //   static Class<T>? field1;
 //                ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
 //   static var field4 = (T t) => T;
 //                        ^
@@ -181,50 +217,10 @@
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
-//   @A<A<T>>()
-//        ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
-//   @A<B<T>>()
-//        ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect
index 31bd8fe..9952b84 100644
--- a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.modular.expect
@@ -2,61 +2,114 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   Extension(T t);
-//   ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   factory Extension.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
-// Try removing the field declaration or making it a static field
-//   T field1;
-//     ^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
-//   Mixin(T t);
-//   ^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
-//   factory Mixin.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
-//   factory Extension.fact(T t) => null;
-//           ^
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
 //
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
 //   static T? method0<S extends T>(T arg) {
 //                               ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
 //   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
 //                                            ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
 //   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
 //                                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
 //   static A<T>? method3<S extends A<T>>(A<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
 //   static B<T>? method5<S extends B<T>>(B<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
 //   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
 //   @Class<void Function<S extends T>()>()
 //                                  ^
@@ -73,102 +126,85 @@
 //   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
 //                                                                                                                ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                                                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                                                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//              ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//              ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
 //   static Class<T>? field1;
 //                ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
 //   static var field4 = (T t) => T;
 //                        ^
@@ -181,50 +217,10 @@
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
-//   @A<A<T>>()
-//        ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
-//   @A<B<T>>()
-//        ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect
index fcae7bb..9be0113 100644
--- a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.outline.expect
@@ -2,61 +2,114 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   Extension(T t);
-//   ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   factory Extension.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
-// Try removing the field declaration or making it a static field
-//   T field1;
-//     ^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
-//   Mixin(T t);
-//   ^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
-//   factory Mixin.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
-//   factory Extension.fact(T t) => null;
-//           ^
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
 //
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
 //   static T? method0<S extends T>(T arg) {
 //                               ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
 //   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
 //                                            ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
 //   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
 //                                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
 //   static A<T>? method3<S extends A<T>>(A<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
 //   static B<T>? method5<S extends B<T>>(B<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
 //   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
 //   @Class<void Function<S extends T>()>()
 //                                  ^
@@ -73,102 +126,85 @@
 //   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
 //                                                                                                                ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                                                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                                                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//              ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//              ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
 //   static Class<T>? field1;
 //                ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
 //   static var field4 = (T t) => T;
 //                        ^
@@ -181,50 +217,10 @@
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
-//   @A<A<T>>()
-//        ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
-//   @A<B<T>>()
-//        ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
diff --git a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
index 1da87de..643a91f 100644
--- a/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/type_variable_in_static_context.dart.weak.transformed.expect
@@ -2,61 +2,114 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   Extension(T t);
-//   ^^^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
-// Try removing the constructor declaration.
-//   factory Extension.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
-// Try removing the field declaration or making it a static field
-//   T field1;
-//     ^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
-//   Mixin(T t);
-//   ^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
-//   factory Mixin.fact(T t) => null;
-//   ^^^^^^^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:11: Error: Expected 0 type arguments.
-//   factory Extension.fact(T t) => null;
-//           ^
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//          ^
 //
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:31: Error: Type variables can't be used in static members.
 //   static T? method0<S extends T>(T arg) {
 //                               ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
+//   static T? method0<S extends T>(T arg) {
+//                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:44: Error: Type variables can't be used in static members.
 //   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
 //                                            ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
+//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
+//                                                      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                      ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:57: Error: Type variables can't be used in static members.
 //   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
 //                                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
+//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
+//                                                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:36: Error: Type variables can't be used in static members.
 //   static A<T>? method3<S extends A<T>>(A<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
+//   static A<T>? method3<S extends A<T>>(A<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
+//   @A<A<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:41: Error: Type variables can't be used in static members.
 //   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
+//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
+//                                                  ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//            ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:36: Error: Type variables can't be used in static members.
 //   static B<T>? method5<S extends B<T>>(B<T> arg) {
 //                                    ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
+//   static B<T>? method5<S extends B<T>>(B<T> arg) {
+//                                          ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
+//   @A<B<T>>()
+//        ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//              ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:41: Error: Type variables can't be used in static members.
 //   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
 //                                         ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
+//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
+//                                                  ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:73:34: Error: Type variables can't be used in static members.
 //   @Class<void Function<S extends T>()>()
 //                                  ^
@@ -73,102 +126,85 @@
 //   static void Function<S extends T>()? method7<U extends void Function<S extends T>()>(void Function<S extends T>() arg) {
 //                                                                                                                ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                    ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:34: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:13:10: Error: Type variables can't be used in static members.
-//   static T? method0<S extends T>(T arg) {
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:54: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                                                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:20:16: Error: Type variables can't be used in static members.
-//   static Class<T>? method1<S extends Class<T>>(Class<T> arg) {
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:74: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                                                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:29:22: Error: Type variables can't be used in static members.
-//   static Class<Class<T>>? method2<S extends Class<Class<T>>>(Class<Class<T>> arg) {
-//                      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:42: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:38:12: Error: Type variables can't be used in static members.
-//   static A<T>? method3<S extends A<T>>(A<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:50: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:47:14: Error: Type variables can't be used in static members.
-//   static A<A<T>>? method4<S extends A<A<T>>>(A<A<T>> arg) {
-//              ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:42: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//                                          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:56:12: Error: Type variables can't be used in static members.
-//   static B<T>? method5<S extends B<T>>(B<T> arg) {
-//            ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:50: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//                                                  ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:65:14: Error: Type variables can't be used in static members.
-//   static A<B<T>>? method6<S extends A<B<T>>>(A<B<T>> arg) {
-//              ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:80:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
+//   @Class<T>()
+//          ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:83:16: Error: Type variables can't be used in static members.
 //   static Class<T>? field1;
 //                ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
+//   @Class<Class<T>>()
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
+//   @A<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
+//   @B<T>()
+//      ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:105:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   Extension(T t);
+//   ^^^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:107:3: Error: Extensions can't declare constructors.
+// Try removing the constructor declaration.
+//   factory Extension.fact(T t) => null;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:113:5: Error: Extensions can't declare instance fields
+// Try removing the field declaration or making it a static field
+//   T field1;
+//     ^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:110:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:116:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:130:3: Error: Mixins can't declare constructors.
+//   Mixin(T t);
+//   ^^^^^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:132:3: Error: Mixins can't declare constructors.
+//   factory Mixin.fact(T t) => null;
+//   ^^^^^^^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:135:10: Error: Type variables can't be used in static members.
 //   static T field0;
 //          ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
-//   static T? staticMethod<S extends T>(T arg) {
-//                                       ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:10: Error: Type variables can't be used in static members.
 //   static T? staticMethod<S extends T>(T arg) {
 //          ^
 //
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:36: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                    ^
+//
+// pkg/front_end/testcases/general/type_variable_in_static_context.dart:138:39: Error: Type variables can't be used in static members.
+//   static T? staticMethod<S extends T>(T arg) {
+//                                       ^
+//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:92:24: Error: Type variables can't be used in static members.
 //   static var field4 = (T t) => T;
 //                        ^
@@ -181,50 +217,10 @@
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:19:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:28:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:37:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:46:8: Error: Type variables can't be used in static members.
-//   @A<A<T>>()
-//        ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:55:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:64:8: Error: Type variables can't be used in static members.
-//   @A<B<T>>()
-//        ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:79:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
 //
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:82:10: Error: Type variables can't be used in static members.
-//   @Class<T>()
-//          ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:85:16: Error: Type variables can't be used in static members.
-//   @Class<Class<T>>()
-//                ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:88:6: Error: Type variables can't be used in static members.
-//   @A<T>()
-//      ^
-//
-// pkg/front_end/testcases/general/type_variable_in_static_context.dart:91:6: Error: Type variables can't be used in static members.
-//   @B<T>()
-//      ^
-//
 // pkg/front_end/testcases/general/type_variable_in_static_context.dart:94:4: Error: Couldn't find constructor 'T'.
 //   @T()
 //    ^
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart b/pkg/front_end/testcases/general/type_variable_type_arguments.dart
new file mode 100644
index 0000000..6243642
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2022, 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.
+
+void method<S>(S<int> a) {}
+
+class Class<T> {
+  void method<S>(T<int> a, S<int> b) {
+    local<U>(U<int> a) {}
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart.textual_outline.expect b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.textual_outline.expect
new file mode 100644
index 0000000..07ae777
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+void method<S>(S<int> a) {}
+
+class Class<T> {
+  void method<S>(T<int> a, S<int> b) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..68c99cb
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.textual_outline_modelled.expect
@@ -0,0 +1,6 @@
+class Class<T> {
+  void method<S>(T<int> a, S<int> b) {}
+}
+
+main() {}
+void method<S>(S<int> a) {}
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.expect b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.expect
new file mode 100644
index 0000000..b5dd513
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:5:16: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+// void method<S>(S<int> a) {}
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:28: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:18: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                  ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:9:14: Error: Can't use type arguments with type variable 'U'.
+// Try removing the type arguments.
+//     local<U>(U<int> a) {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  method method<S extends core::Object? = dynamic>(invalid-type a, invalid-type b) → void {
+    function local<U extends core::Object? = dynamic>(invalid-type a) → Null {}
+  }
+}
+static method method<S extends core::Object? = dynamic>(invalid-type a) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.modular.expect
new file mode 100644
index 0000000..b5dd513
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.modular.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:5:16: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+// void method<S>(S<int> a) {}
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:28: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:18: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                  ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:9:14: Error: Can't use type arguments with type variable 'U'.
+// Try removing the type arguments.
+//     local<U>(U<int> a) {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  method method<S extends core::Object? = dynamic>(invalid-type a, invalid-type b) → void {
+    function local<U extends core::Object? = dynamic>(invalid-type a) → Null {}
+  }
+}
+static method method<S extends core::Object? = dynamic>(invalid-type a) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.outline.expect
new file mode 100644
index 0000000..20db1ac
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.outline.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:5:16: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+// void method<S>(S<int> a) {}
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:28: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:18: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                  ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    ;
+  method method<S extends core::Object? = dynamic>(invalid-type a, invalid-type b) → void
+    ;
+}
+static method method<S extends core::Object? = dynamic>(invalid-type a) → void
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.transformed.expect
new file mode 100644
index 0000000..b5dd513
--- /dev/null
+++ b/pkg/front_end/testcases/general/type_variable_type_arguments.dart.weak.transformed.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:5:16: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+// void method<S>(S<int> a) {}
+//                ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:28: Error: Can't use type arguments with type variable 'S'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                            ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:8:18: Error: Can't use type arguments with type variable 'T'.
+// Try removing the type arguments.
+//   void method<S>(T<int> a, S<int> b) {
+//                  ^
+//
+// pkg/front_end/testcases/general/type_variable_type_arguments.dart:9:14: Error: Can't use type arguments with type variable 'U'.
+// Try removing the type arguments.
+//     local<U>(U<int> a) {}
+//              ^
+//
+import self as self;
+import "dart:core" as core;
+
+class Class<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::Class<self::Class::T%>
+    : super core::Object::•()
+    ;
+  method method<S extends core::Object? = dynamic>(invalid-type a, invalid-type b) → void {
+    function local<U extends core::Object? = dynamic>(invalid-type a) → Null {}
+  }
+}
+static method method<S extends core::Object? = dynamic>(invalid-type a) → void {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
index 4fb5295..3ca4123 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.1.expect
@@ -3,10 +3,6 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:4:21: Error: Expected 0 type arguments.
-// class Bar<X extends Foo<Null>> {}
-//                     ^
-//
 // org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
 // class Bar<X extends Foo<Null>> {}
 //                     ^^^
diff --git a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
index 5a65282..6e6264d 100644
--- a/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental/reissue_errors_6.yaml.world.2.expect
@@ -3,10 +3,6 @@
 //
 // Problems in library:
 //
-// org-dartlang-test:///lib.dart:4:21: Error: Expected 0 type arguments.
-// class Bar<X extends Foo<Null>> {}
-//                     ^
-//
 // org-dartlang-test:///lib.dart:4:21: Error: Type 'Foo' not found.
 // class Bar<X extends Foo<Null>> {}
 //                     ^^^
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.expect
index 5fac846..45ecb5c 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.expect
@@ -75,81 +75,81 @@
 // class Ooo = Aoo with Never;
 //       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
 // class Joo extends Boo with Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
 // class Koo extends Never {}
-//       ^
+//                   ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
 // class Loo implements Never {}
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
 // mixin Moo6 on Never {}
-//       ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
 // class Noo = Never with Aoo;
-//       ^
+//             ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
 // class NooDynamic = dynamic with Aoo;
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
 // class Ooo = Aoo with Never;
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Koo extends Never {}
-//       ^
+//                   ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
 // class Loo implements Never {}
-//       ^
+//                      ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
 // mixin Moo6 on Never {}
-//       ^
+//               ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Noo = Never with Aoo;
-//       ^
+//             ^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.transformed.expect
index a6f6d2a..36281bf 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.strong.transformed.expect
@@ -75,81 +75,81 @@
 // class Ooo = Aoo with Never;
 //       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
 // class Joo extends Boo with Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
 // class Koo extends Never {}
-//       ^
+//                   ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
 // class Loo implements Never {}
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
 // mixin Moo6 on Never {}
-//       ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
 // class Noo = Never with Aoo;
-//       ^
+//             ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
 // class NooDynamic = dynamic with Aoo;
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
 // class Ooo = Aoo with Never;
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Koo extends Never {}
-//       ^
+//                   ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
 // class Loo implements Never {}
-//       ^
+//                      ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
 // mixin Moo6 on Never {}
-//       ^
+//               ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Noo = Never with Aoo;
-//       ^
+//             ^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect
index 5fac846..45ecb5c 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect
@@ -75,81 +75,81 @@
 // class Ooo = Aoo with Never;
 //       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
 // class Joo extends Boo with Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
 // class Koo extends Never {}
-//       ^
+//                   ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
 // class Loo implements Never {}
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
 // mixin Moo6 on Never {}
-//       ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
 // class Noo = Never with Aoo;
-//       ^
+//             ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
 // class NooDynamic = dynamic with Aoo;
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
 // class Ooo = Aoo with Never;
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Koo extends Never {}
-//       ^
+//                   ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
 // class Loo implements Never {}
-//       ^
+//                      ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
 // mixin Moo6 on Never {}
-//       ^
+//               ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Noo = Never with Aoo;
-//       ^
+//             ^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect
index 5fac846..45ecb5c 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.modular.expect
@@ -75,81 +75,81 @@
 // class Ooo = Aoo with Never;
 //       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
 // class Joo extends Boo with Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
 // class Koo extends Never {}
-//       ^
+//                   ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
 // class Loo implements Never {}
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
 // mixin Moo6 on Never {}
-//       ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
 // class Noo = Never with Aoo;
-//       ^
+//             ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
 // class NooDynamic = dynamic with Aoo;
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
 // class Ooo = Aoo with Never;
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Koo extends Never {}
-//       ^
+//                   ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
 // class Loo implements Never {}
-//       ^
+//                      ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
 // mixin Moo6 on Never {}
-//       ^
+//               ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Noo = Never with Aoo;
-//       ^
+//             ^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.outline.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.outline.expect
index 33133b3..94601e3 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.outline.expect
@@ -75,81 +75,81 @@
 // class Ooo = Aoo with Never;
 //       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
 // class Joo extends Boo with Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
 // class Koo extends Never {}
-//       ^
+//                   ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
 // class Loo implements Never {}
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
 // mixin Moo6 on Never {}
-//       ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
 // class Noo = Never with Aoo;
-//       ^
+//             ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
 // class NooDynamic = dynamic with Aoo;
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
 // class Ooo = Aoo with Never;
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Koo extends Never {}
-//       ^
+//                   ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
 // class Loo implements Never {}
-//       ^
+//                      ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
 // mixin Moo6 on Never {}
-//       ^
+//               ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Noo = Never with Aoo;
-//       ^
+//             ^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect
index a6f6d2a..36281bf 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect
@@ -75,81 +75,81 @@
 // class Ooo = Aoo with Never;
 //       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:26:28: Error: The type 'Never' can't be used as supertype.
 // class Joo extends Boo with Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used as supertype.
 // class Koo extends Never {}
-//       ^
+//                   ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used as supertype.
 // class Loo implements Never {}
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used as supertype.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used as supertype.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used as supertype.
 // mixin Moo6 on Never {}
-//       ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used as supertype.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used as supertype.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used as supertype.
 // class Noo = Never with Aoo;
-//       ^
+//             ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:7: Error: The type 'dynamic' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:49:20: Error: The type 'dynamic' can't be used as supertype.
 // class NooDynamic = dynamic with Aoo;
-//       ^
+//                    ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:7: Error: The type 'Never' can't be used as supertype.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:52:22: Error: The type 'Never' can't be used as supertype.
 // class Ooo = Aoo with Never;
-//       ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:28:19: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Koo extends Never {}
-//       ^
+//                   ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:30:22: Error: The type 'Never' can't be used in an 'implements' clause.
 // class Loo implements Never {}
-//       ^
+//                      ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:38:30: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo4 on Aoo implements Never {}
-//       ^
+//                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:40:20: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo5 on Aoo, Never {}
-//       ^
+//                    ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:42:15: Error: The type 'Never' can't be used in an 'extends' clause.
 // mixin Moo6 on Never {}
-//       ^
+//               ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:44:28: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo7 implements Aoo, Never {}
-//       ^
+//                            ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:7: Error: The type 'Never' can't be used in an 'implements' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:46:23: Error: The type 'Never' can't be used in an 'implements' clause.
 // mixin Moo8 implements Never {}
-//       ^
+//                       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:7: Error: The type 'Never' can't be used in an 'extends' clause.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:48:13: Error: The type 'Never' can't be used in an 'extends' clause.
 // class Noo = Never with Aoo;
-//       ^
+//             ^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.expect
index 6095355..067e4b2 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.expect
@@ -100,162 +100,162 @@
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:18: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C1 extends AAlias {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:21: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C2 implements AAlias {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:19: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C3 = A with BAlias;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:32: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C4 = A with B implements CAlias;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
 // typedef CAlias = C?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:25: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C5 extends A with BAlias {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:13: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M1 on AAlias {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:16: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M2 on A, BAlias {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:26: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M3 on A implements BAlias {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1 extends TAlias<A> {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1a extends prefix.TAlias<A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1b extends TAlias<prefix.A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D2 implements TAlias<A> {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D3 = A with TAlias<B>;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D4 = A with B implements TAlias<C>;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D5 extends A with TAlias<B> {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1 on TAlias<A> {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1a on prefix.TAlias<A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1b on TAlias<prefix.A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N2 on A, TAlias<B> {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N3 on A implements TAlias<B> {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.transformed.expect
index 62c7762..eeb78f7 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.strong.transformed.expect
@@ -100,162 +100,162 @@
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:18: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C1 extends AAlias {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:21: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C2 implements AAlias {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:19: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C3 = A with BAlias;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:32: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C4 = A with B implements CAlias;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
 // typedef CAlias = C?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:25: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C5 extends A with BAlias {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:13: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M1 on AAlias {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:16: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M2 on A, BAlias {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:26: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M3 on A implements BAlias {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1 extends TAlias<A> {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1a extends prefix.TAlias<A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1b extends TAlias<prefix.A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D2 implements TAlias<A> {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D3 = A with TAlias<B>;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D4 = A with B implements TAlias<C>;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D5 extends A with TAlias<B> {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1 on TAlias<A> {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1a on prefix.TAlias<A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1b on TAlias<prefix.A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N2 on A, TAlias<B> {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N3 on A implements TAlias<B> {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.expect
index 6095355..067e4b2 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.expect
@@ -100,162 +100,162 @@
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:18: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C1 extends AAlias {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:21: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C2 implements AAlias {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:19: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C3 = A with BAlias;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:32: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C4 = A with B implements CAlias;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
 // typedef CAlias = C?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:25: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C5 extends A with BAlias {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:13: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M1 on AAlias {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:16: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M2 on A, BAlias {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:26: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M3 on A implements BAlias {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1 extends TAlias<A> {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1a extends prefix.TAlias<A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1b extends TAlias<prefix.A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D2 implements TAlias<A> {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D3 = A with TAlias<B>;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D4 = A with B implements TAlias<C>;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D5 extends A with TAlias<B> {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1 on TAlias<A> {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1a on prefix.TAlias<A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1b on TAlias<prefix.A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N2 on A, TAlias<B> {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N3 on A implements TAlias<B> {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect
index 6095355..067e4b2 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.modular.expect
@@ -100,162 +100,162 @@
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:18: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C1 extends AAlias {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:21: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C2 implements AAlias {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:19: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C3 = A with BAlias;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:32: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C4 = A with B implements CAlias;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
 // typedef CAlias = C?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:25: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C5 extends A with BAlias {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:13: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M1 on AAlias {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:16: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M2 on A, BAlias {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:26: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M3 on A implements BAlias {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1 extends TAlias<A> {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1a extends prefix.TAlias<A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1b extends TAlias<prefix.A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D2 implements TAlias<A> {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D3 = A with TAlias<B>;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D4 = A with B implements TAlias<C>;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D5 extends A with TAlias<B> {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1 on TAlias<A> {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1a on prefix.TAlias<A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1b on TAlias<prefix.A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N2 on A, TAlias<B> {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N3 on A implements TAlias<B> {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.outline.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.outline.expect
index 22df973..d128009 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.outline.expect
@@ -100,162 +100,162 @@
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:18: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C1 extends AAlias {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:21: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C2 implements AAlias {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:19: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C3 = A with BAlias;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:32: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C4 = A with B implements CAlias;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
 // typedef CAlias = C?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:25: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C5 extends A with BAlias {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:13: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M1 on AAlias {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:16: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M2 on A, BAlias {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:26: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M3 on A implements BAlias {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1 extends TAlias<A> {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1a extends prefix.TAlias<A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1b extends TAlias<prefix.A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D2 implements TAlias<A> {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D3 = A with TAlias<B>;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D4 = A with B implements TAlias<C>;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D5 extends A with TAlias<B> {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1 on TAlias<A> {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1a on prefix.TAlias<A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1b on TAlias<prefix.A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N2 on A, TAlias<B> {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N3 on A implements TAlias<B> {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
diff --git a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.transformed.expect b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.transformed.expect
index 62c7762..eeb78f7 100644
--- a/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart.weak.transformed.expect
@@ -100,162 +100,162 @@
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:16:18: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C1 extends AAlias {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:18:21: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C2 implements AAlias {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:20:19: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C3 = A with BAlias;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:7: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:22:32: Error: The type 'CAlias' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C4 = A with B implements CAlias;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:13:9: Context: The issue arises via this type alias.
 // typedef CAlias = C?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:24:25: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class C5 extends A with BAlias {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:7: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:26:13: Error: The type 'AAlias' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M1 on AAlias {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:11:9: Context: The issue arises via this type alias.
 // typedef AAlias = A?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:28:16: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M2 on A, BAlias {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:7: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:30:26: Error: The type 'BAlias' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin M3 on A implements BAlias {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:12:9: Context: The issue arises via this type alias.
 // typedef BAlias = B?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:32:18: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1 extends TAlias<A> {}
-//       ^
+//                  ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:34:19: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1a extends prefix.TAlias<A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:36:19: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D1b extends TAlias<prefix.A> {}
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:38:21: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D2 implements TAlias<A> {}
-//       ^
+//                     ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:40:19: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D3 = A with TAlias<B>;
-//       ^
+//                   ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:7: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:42:32: Error: The type 'TAlias<C>' which is an alias of 'C?' can't be used as supertype because it is nullable.
 //  - 'C' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D4 = A with B implements TAlias<C>;
-//       ^
+//                                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:44:25: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // class D5 extends A with TAlias<B> {}
-//       ^
+//                         ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:7: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:46:13: Error: The type 'TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1 on TAlias<A> {}
-//       ^
+//             ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:7: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:48:14: Error: The type 'prefix.TAlias<A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1a on prefix.TAlias<A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:7: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:50:14: Error: The type 'TAlias<prefix.A>' which is an alias of 'A?' can't be used as supertype because it is nullable.
 //  - 'A' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N1b on TAlias<prefix.A> {}
-//       ^
+//              ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:52:16: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N2 on A, TAlias<B> {}
-//       ^
+//                ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
 //
-// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:7: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
+// pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:54:26: Error: The type 'TAlias<B>' which is an alias of 'B?' can't be used as supertype because it is nullable.
 //  - 'B' is from 'pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart'.
 // mixin N3 on A implements TAlias<B> {}
-//       ^
+//                          ^
 // pkg/front_end/testcases/nonfunction_type_aliases/nullable_supertypes.dart:14:9: Context: The issue arises via this type alias.
 // typedef TAlias<T> = T?;
 //         ^
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect
index ba00133..728db79 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.expect
@@ -15,10 +15,6 @@
 //   T<U> v;
 //     ^
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
-//   T<U> v;
-//   ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
index ba00133..728db79 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.modular.expect
@@ -15,10 +15,6 @@
 //   T<U> v;
 //     ^
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
-//   T<U> v;
-//   ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect
index ba00133..728db79 100644
--- a/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31190.dart.weak.transformed.expect
@@ -15,10 +15,6 @@
 //   T<U> v;
 //     ^
 //
-// pkg/front_end/testcases/regress/issue_31190.dart:6:3: Error: Expected 0 type arguments.
-//   T<U> v;
-//   ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect
index efb5579..13bbe76 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// pkg/front_end/testcases/regress/issue_34291.dart:9:5: Error: Expected 0 type arguments.
 // lib.A<B> foo() {}
-// ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
index efb5579..13bbe76 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.modular.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// pkg/front_end/testcases/regress/issue_34291.dart:9:5: Error: Expected 0 type arguments.
 // lib.A<B> foo() {}
-// ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect
index 5df2ea6..79da717 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.outline.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// pkg/front_end/testcases/regress/issue_34291.dart:9:5: Error: Expected 0 type arguments.
 // lib.A<B> foo() {}
-// ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect
index efb5579..13bbe76 100644
--- a/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34291.dart.weak.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/regress/issue_34291.dart:9:1: Error: Expected 0 type arguments.
+// pkg/front_end/testcases/regress/issue_34291.dart:9:5: Error: Expected 0 type arguments.
 // lib.A<B> foo() {}
-// ^
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect
index 9e29266..460422e 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.expect
@@ -31,10 +31,6 @@
 // <foo<
 //  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
-// <foo<
-//  ^
-//
 // pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
 // foo
 // ^^^
@@ -46,10 +42,6 @@
 // Future<List<int>> f2() async => null;
 // ^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
-// Future<List<>> f3() async {
-// ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
index 9e29266..460422e 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.modular.expect
@@ -31,10 +31,6 @@
 // <foo<
 //  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
-// <foo<
-//  ^
-//
 // pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
 // foo
 // ^^^
@@ -46,10 +42,6 @@
 // Future<List<int>> f2() async => null;
 // ^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
-// Future<List<>> f3() async {
-// ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect
index 393c9ed..34f987e 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.outline.expect
@@ -31,10 +31,6 @@
 // <foo<
 //  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
-// <foo<
-//  ^
-//
 // pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
 // foo
 // ^^^
@@ -46,10 +42,6 @@
 // Future<List<int>> f2() async => null;
 // ^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
-// Future<List<>> f3() async {
-// ^
-//
 import self as self;
 import "dart:core" as core;
 
diff --git a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
index 6ded2e6..e1979d3 100644
--- a/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_34850.dart.weak.transformed.expect
@@ -31,10 +31,6 @@
 // <foo<
 //  ^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:5:2: Error: Expected 0 type arguments.
-// <foo<
-//  ^
-//
 // pkg/front_end/testcases/regress/issue_34850.dart:11:1: Error: Type 'foo' not found.
 // foo
 // ^^^
@@ -46,10 +42,6 @@
 // Future<List<int>> f2() async => null;
 // ^^^^^^
 //
-// pkg/front_end/testcases/regress/issue_34850.dart:14:1: Error: Expected 0 type arguments.
-// Future<List<>> f3() async {
-// ^
-//
 import self as self;
 import "dart:core" as core;
 import "dart:async" as asy;
diff --git a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.expect b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.expect
index 03c63ac..9b9fe6e 100644
--- a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.expect
+++ b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.expect
@@ -14,21 +14,21 @@
 // class DND2 extends Object with M<dynamic> Function() {
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:43: Error: Can't use a function type as supertype.
 // class DND1 extends Object with M<dynamic> Function()> {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:43: Error: Can't use a function type as supertype.
 // class DND2 extends Object with M<dynamic> Function() {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:31: Error: Can't use a function type as supertype.
 // class DND3 extends M<dynamic> Function() {
-//       ^
+//                               ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:34: Error: Can't use a function type as supertype.
 // class DND4 implements M<dynamic> Function() {
-//       ^
+//                                  ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect
index 03c63ac..9b9fe6e 100644
--- a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect
+++ b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.modular.expect
@@ -14,21 +14,21 @@
 // class DND2 extends Object with M<dynamic> Function() {
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:43: Error: Can't use a function type as supertype.
 // class DND1 extends Object with M<dynamic> Function()> {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:43: Error: Can't use a function type as supertype.
 // class DND2 extends Object with M<dynamic> Function() {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:31: Error: Can't use a function type as supertype.
 // class DND3 extends M<dynamic> Function() {
-//       ^
+//                               ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:34: Error: Can't use a function type as supertype.
 // class DND4 implements M<dynamic> Function() {
-//       ^
+//                                  ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.outline.expect b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.outline.expect
index b75b781..4e0b87c 100644
--- a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.outline.expect
+++ b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.outline.expect
@@ -14,21 +14,21 @@
 // class DND2 extends Object with M<dynamic> Function() {
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:43: Error: Can't use a function type as supertype.
 // class DND1 extends Object with M<dynamic> Function()> {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:43: Error: Can't use a function type as supertype.
 // class DND2 extends Object with M<dynamic> Function() {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:31: Error: Can't use a function type as supertype.
 // class DND3 extends M<dynamic> Function() {
-//       ^
+//                               ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:34: Error: Can't use a function type as supertype.
 // class DND4 implements M<dynamic> Function() {
-//       ^
+//                                  ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.transformed.expect b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.transformed.expect
index 03c63ac..9b9fe6e 100644
--- a/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_41265.crash_dart.weak.transformed.expect
@@ -14,21 +14,21 @@
 // class DND2 extends Object with M<dynamic> Function() {
 //       ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:9:43: Error: Can't use a function type as supertype.
 // class DND1 extends Object with M<dynamic> Function()> {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:12:43: Error: Can't use a function type as supertype.
 // class DND2 extends Object with M<dynamic> Function() {
-//       ^
+//                                           ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:15:31: Error: Can't use a function type as supertype.
 // class DND3 extends M<dynamic> Function() {
-//       ^
+//                               ^
 //
-// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:7: Error: Can't use a function type as supertype.
+// pkg/front_end/testcases/regress/issue_41265.crash_dart:18:34: Error: Can't use a function type as supertype.
 // class DND4 implements M<dynamic> Function() {
-//       ^
+//                                  ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/tool/ast_model.dart b/pkg/front_end/tool/ast_model.dart
index 834aa12..e06996a 100644
--- a/pkg/front_end/tool/ast_model.dart
+++ b/pkg/front_end/tool/ast_model.dart
@@ -177,6 +177,7 @@
   },
   'FunctionType': {
     'typeParameters': FieldRule(isDeclaration: true),
+    '_typedefType': FieldRule(name: 'typedefType'),
   },
   'TypeParameterType': {
     'parameter': FieldRule(isDeclaration: false),
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 28d8c84..17ac253 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -11203,8 +11203,7 @@
   @override
   final Nullability declaredNullability;
 
-  /// The [Typedef] this function type is created for.
-  final TypedefType? typedefType;
+  TypedefType? _typedefType;
 
   final DartType returnType;
 
@@ -11216,15 +11215,27 @@
       {this.namedParameters: const <NamedType>[],
       this.typeParameters: const <TypeParameter>[],
       int? requiredParameterCount,
-      this.typedefType})
+      TypedefType? typedefType})
       : this.positionalParameters = positionalParameters,
         this.requiredParameterCount =
-            requiredParameterCount ?? positionalParameters.length;
+            requiredParameterCount ?? positionalParameters.length,
+        _typedefType = typedefType;
 
-  Reference? get typedefReference => typedefType?.typedefReference;
+  Reference? get typedefReference => _typedefType?.typedefReference;
 
   Typedef? get typedef => typedefReference?.asTypedef;
 
+  /// The [Typedef] this function type is created for, if any.
+  TypedefType? get typedefType => _typedefType;
+
+  void set typedefType(TypedefType? value) {
+    assert(
+        _typedefType == null,
+        "Cannot change an already set FunctionType.typedefType from "
+        "$_typedefType to $value.");
+    _typedefType = value;
+  }
+
   @override
   Nullability get nullability => declaredNullability;
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 580bd40..359c6db 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -2382,7 +2382,7 @@
 
 void Assembler::PopNativeCalleeSavedRegisters() {
   // Restore the bottom 64-bits of callee-saved V registers.
-  bool pop_single = (kAbiPreservedCpuRegCount & 1) == 1;
+  bool pop_single = (kAbiPreservedFpuRegCount & 1) == 1;
   VRegister vprev = kNoVRegister;
   for (int i = kAbiLastPreservedFpuReg; i >= kAbiFirstPreservedFpuReg; i--) {
     const VRegister r = static_cast<VRegister>(i);
diff --git a/tests/co19/update.sh b/tests/co19/update.sh
index abce487..610182f 100755
--- a/tests/co19/update.sh
+++ b/tests/co19/update.sh
@@ -21,14 +21,6 @@
 git branch cl-co19-roll-co19-to-$NEW origin/main
 git checkout cl-co19-roll-co19-to-$NEW
 
-# Build a cipd package of the commit.
-BUILD_ID=$(bb add \
-              -commit https://dart.googlesource.com/co19/+/$NEW \
-              -json \
-              dart/ci/co19-roller \
-             | jq -r '.id')
-bb collect -interval 10s $BUILD_ID
-
 # Update DEPS:
 gclient setdep --var=co19_rev=$NEW
 
diff --git a/tests/co19_2/update.sh b/tests/co19_2/update.sh
index b70d919..ca6b486 100755
--- a/tests/co19_2/update.sh
+++ b/tests/co19_2/update.sh
@@ -21,15 +21,6 @@
 git branch cl-co19-roll-co19-to-$NEW origin/main
 git checkout cl-co19-roll-co19-to-$NEW
 
-# Build a cipd package of the commit.
-BUILD_ID=$(bb add \
-              -commit https://dart.googlesource.com/co19/+/$NEW \
-              -json \
-              -p variant=legacy \
-              dart/ci/co19-roller \
-             | jq -r '.id')
-bb collect -interval 10s $BUILD_ID
-
 # Update DEPS:
 gclient setdep --var=co19_2_rev=$NEW
 
diff --git a/tests/language/dynamic/dynamic2_test.dart b/tests/language/dynamic/dynamic2_test.dart
index 6871f9f..e62c7aa 100644
--- a/tests/language/dynamic/dynamic2_test.dart
+++ b/tests/language/dynamic/dynamic2_test.dart
@@ -5,14 +5,14 @@
 // Test the prohibited use of 'dynamic' in extending and implementing classes.
 
 class A
-//    ^
-// [cfe] The type 'dynamic' can't be used as supertype.
   extends dynamic
   //      ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
+  // [cfe] The type 'dynamic' can't be used as supertype.
   implements dynamic
   //         ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+  // [cfe] The type 'dynamic' can't be used as supertype.
 {}
 
 main() {
diff --git a/tests/language/identifier/known_prefix_error_test.dart b/tests/language/identifier/known_prefix_error_test.dart
index 458f6e0..e0d5ac6 100644
--- a/tests/language/identifier/known_prefix_error_test.dart
+++ b/tests/language/identifier/known_prefix_error_test.dart
@@ -29,42 +29,34 @@
 // [error line 28, column 1, length 5]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'async' isn't a type.
-// [cfe] Expected 0 type arguments.
 await<dynamic> _await = new await.A();
-// [error line 33, column 1, length 5]
+// [error line 32, column 1, length 5]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'await' isn't a type.
-// [cfe] Expected 0 type arguments.
 hide<dynamic> _hide = new hide.A();
-// [error line 38, column 1, length 4]
+// [error line 36, column 1, length 4]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'hide' isn't a type.
-// [cfe] Expected 0 type arguments.
 of<dynamic> _of = new of.A();
-// [error line 43, column 1, length 2]
+// [error line 40, column 1, length 2]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'of' isn't a type.
-// [cfe] Expected 0 type arguments.
 on<dynamic> _on = new on.A();
-// [error line 48, column 1, length 2]
+// [error line 44, column 1, length 2]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'on' isn't a type.
-// [cfe] Expected 0 type arguments.
 show<dynamic> _show = new show.A();
-// [error line 53, column 1, length 4]
+// [error line 48, column 1, length 4]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'show' isn't a type.
-// [cfe] Expected 0 type arguments.
 sync<dynamic> _sync = new sync.A();
-// [error line 58, column 1, length 4]
+// [error line 52, column 1, length 4]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'sync' isn't a type.
-// [cfe] Expected 0 type arguments.
 yield<dynamic> _yield = new yield.A();
-// [error line 63, column 1, length 5]
+// [error line 56, column 1, length 5]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'yield' isn't a type.
-// [cfe] Expected 0 type arguments.
 
 async.B<async> _B_async = new async.B();
 //      ^^^^^
@@ -103,42 +95,34 @@
 //      ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'async' isn't a type.
-// [cfe] Expected 0 type arguments.
 await.B<await<dynamic>> _B2_await = new await.B();
 //      ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'await' isn't a type.
-// [cfe] Expected 0 type arguments.
 hide.B<hide<dynamic>> _B2_hide = new hide.B();
 //     ^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'hide' isn't a type.
-// [cfe] Expected 0 type arguments.
 of.B<of<dynamic>> _B2_of = new of.B();
 //   ^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'of' isn't a type.
-// [cfe] Expected 0 type arguments.
 on.B<on<dynamic>> _B2_on = new on.B();
 //   ^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'on' isn't a type.
-// [cfe] Expected 0 type arguments.
 show.B<show<dynamic>> _B2_show = new show.B();
 //     ^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'show' isn't a type.
-// [cfe] Expected 0 type arguments.
 sync.B<sync<dynamic>> _B2_sync = new sync.B();
 //     ^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'sync' isn't a type.
-// [cfe] Expected 0 type arguments.
 yield.B<yield<dynamic>> _B2_yield = new yield.B();
 //      ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'yield' isn't a type.
-// [cfe] Expected 0 type arguments.
 
 main() {
   Expect.isTrue(_async is async.A);
diff --git a/tests/language/malformed/inheritance_test.dart b/tests/language/malformed/inheritance_test.dart
index 8eed858..4161dfa 100644
--- a/tests/language/malformed/inheritance_test.dart
+++ b/tests/language/malformed/inheritance_test.dart
@@ -61,9 +61,9 @@
     extends A<int>
     //      ^
     // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //      ^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     {
 }
 
@@ -71,9 +71,9 @@
     extends A<Unresolved>
     //      ^
     // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //      ^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     //        ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
     // [cfe] Type 'Unresolved' not found.
@@ -86,9 +86,9 @@
     extends Object with A<int>
     //                  ^
     // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //                  ^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     {
 }
 
@@ -98,9 +98,9 @@
     extends Object with A<Unresolved>
     //                  ^
     // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //                  ^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     //                    ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
     // [cfe] Type 'Unresolved' not found.
@@ -111,9 +111,9 @@
     implements A<int>
     //         ^
     // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //         ^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     {
 }
 
@@ -121,9 +121,9 @@
     implements A<Unresolved>
     //         ^
     // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //         ^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     //           ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
     // [cfe] Type 'Unresolved' not found.
diff --git a/tests/language_2/dynamic/dynamic2_test.dart b/tests/language_2/dynamic/dynamic2_test.dart
index 25e43d1..e83c75c 100644
--- a/tests/language_2/dynamic/dynamic2_test.dart
+++ b/tests/language_2/dynamic/dynamic2_test.dart
@@ -7,14 +7,14 @@
 // @dart = 2.9
 
 class A
-//    ^
-// [cfe] The type 'dynamic' can't be used as supertype.
   extends dynamic
   //      ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
+  // [cfe] The type 'dynamic' can't be used as supertype.
   implements dynamic
   //         ^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
+  // [cfe] The type 'dynamic' can't be used as supertype.
 {}
 
 main() {
diff --git a/tests/language_2/identifier/known_prefix_error_test.dart b/tests/language_2/identifier/known_prefix_error_test.dart
index 2cc7982..e4bd56f 100644
--- a/tests/language_2/identifier/known_prefix_error_test.dart
+++ b/tests/language_2/identifier/known_prefix_error_test.dart
@@ -31,42 +31,34 @@
 // [error line 30, column 1, length 5]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'async' isn't a type.
-// [cfe] Expected 0 type arguments.
 await<dynamic> _await = new await.A();
-// [error line 35, column 1, length 5]
+// [error line 34, column 1, length 5]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'await' isn't a type.
-// [cfe] Expected 0 type arguments.
 hide<dynamic> _hide = new hide.A();
-// [error line 40, column 1, length 4]
+// [error line 38, column 1, length 4]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'hide' isn't a type.
-// [cfe] Expected 0 type arguments.
 of<dynamic> _of = new of.A();
-// [error line 45, column 1, length 2]
+// [error line 42, column 1, length 2]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'of' isn't a type.
-// [cfe] Expected 0 type arguments.
 on<dynamic> _on = new on.A();
-// [error line 50, column 1, length 2]
+// [error line 46, column 1, length 2]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'on' isn't a type.
-// [cfe] Expected 0 type arguments.
 show<dynamic> _show = new show.A();
-// [error line 55, column 1, length 4]
+// [error line 50, column 1, length 4]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'show' isn't a type.
-// [cfe] Expected 0 type arguments.
 sync<dynamic> _sync = new sync.A();
-// [error line 60, column 1, length 4]
+// [error line 54, column 1, length 4]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'sync' isn't a type.
-// [cfe] Expected 0 type arguments.
 yield<dynamic> _yield = new yield.A();
-// [error line 65, column 1, length 5]
+// [error line 58, column 1, length 5]
 // [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
 // [cfe] 'yield' isn't a type.
-// [cfe] Expected 0 type arguments.
 
 async.B<async> _B_async = new async.B();
 //      ^^^^^
@@ -105,42 +97,34 @@
 //      ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'async' isn't a type.
-// [cfe] Expected 0 type arguments.
 await.B<await<dynamic>> _B2_await = new await.B();
 //      ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'await' isn't a type.
-// [cfe] Expected 0 type arguments.
 hide.B<hide<dynamic>> _B2_hide = new hide.B();
 //     ^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'hide' isn't a type.
-// [cfe] Expected 0 type arguments.
 of.B<of<dynamic>> _B2_of = new of.B();
 //   ^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'of' isn't a type.
-// [cfe] Expected 0 type arguments.
 on.B<on<dynamic>> _B2_on = new on.B();
 //   ^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'on' isn't a type.
-// [cfe] Expected 0 type arguments.
 show.B<show<dynamic>> _B2_show = new show.B();
 //     ^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'show' isn't a type.
-// [cfe] Expected 0 type arguments.
 sync.B<sync<dynamic>> _B2_sync = new sync.B();
 //     ^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'sync' isn't a type.
-// [cfe] Expected 0 type arguments.
 yield.B<yield<dynamic>> _B2_yield = new yield.B();
 //      ^^^^^
 // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
 // [cfe] 'yield' isn't a type.
-// [cfe] Expected 0 type arguments.
 
 main() {
   Expect.isTrue(_async is async.A);
diff --git a/tests/language_2/malformed/inheritance_test.dart b/tests/language_2/malformed/inheritance_test.dart
index 20b78dd..6a0c070 100644
--- a/tests/language_2/malformed/inheritance_test.dart
+++ b/tests/language_2/malformed/inheritance_test.dart
@@ -63,9 +63,9 @@
     extends A<int>
     //      ^
     // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //      ^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     {
 }
 
@@ -73,9 +73,9 @@
     extends A<Unresolved>
     //      ^
     // [analyzer] COMPILE_TIME_ERROR.EXTENDS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //      ^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     //        ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
     // [cfe] Type 'Unresolved' not found.
@@ -88,9 +88,9 @@
     extends Object with A<int>
     //                  ^
     // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //                  ^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     {
 }
 
@@ -100,9 +100,9 @@
     extends Object with A<Unresolved>
     //                  ^
     // [analyzer] COMPILE_TIME_ERROR.MIXIN_OF_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //                  ^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     //                    ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
     // [cfe] Type 'Unresolved' not found.
@@ -113,9 +113,9 @@
     implements A<int>
     //         ^
     // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //         ^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     {
 }
 
@@ -123,9 +123,9 @@
     implements A<Unresolved>
     //         ^
     // [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-    // [cfe] Can't use type arguments with type variable 'A'.
     //         ^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_TYPE_ARGUMENTS
+    // [cfe] Can't use type arguments with type variable 'A'.
     //           ^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_AS_TYPE_ARGUMENT
     // [cfe] Type 'Unresolved' not found.
diff --git a/tools/VERSION b/tools/VERSION
index ebc26f2..c15e757 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 248
+PRERELEASE 249
 PRERELEASE_PATCH 0
\ No newline at end of file
